Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > процесс-консольное приложение в фоновом режиме


Автор: Sasha13 14.4.2009, 15:31
Пишу программу, в одной из частей которой создаётся файл исходных данных, затем запускаются по очереди два процесса, каждый из которых является консольной программой, написанной на фортране, и в конце считывается результат работы консольных программ. Вычисления по данному алгоритму проводятся много раз, поэтому не хочется, чтобы при работе постоянно загорались и пропадали консольные окна этих программ. Как сделать чтобы они не появлялись? 

Код

  class RaschetVzaimodeisvia
  {
    public void GetForce(string path_to_REZ, string path_to_SILA)
    {
      Process MyProc1 = Process.Start(@"STATV.EXE");
      MyProc1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
      MyProc1.WaitForExit();
      MyProc1.Close();

      Process MyProc2 = Process.Start(@"VZAIM.EXE");
      MyProc2.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
      MyProc2.WaitForExit();
      MyProc2.Close();
    }
  }


Почему строка 
Код
 MyProc1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
 не скрывает консольные окна?
Спасибо!

Автор: KelTron 14.4.2009, 17:41
Поиск рулит, соседнюю тему посмотри http://forum.vingrad.ru/forum/topic-194067.html

Автор: Retro 14.4.2009, 17:42
http://forum.vingrad.ru/topic-194067.html

Добавлено через 25 секунд
KelTron, не успел. smile 

Автор: DVariuS 14.4.2009, 19:17
Sasha13, попробуй так:
Код

class RaschetVzaimodeisvia
  {
    public void GetForce(string path_to_REZ, string path_to_SILA)
    {
      Process MyProc1 = new Process();
      MyProc1.StartInfo.FileName = @"STATV.EXE";
      MyProc1.StartInfo.CreateNoWindow = true;
      MyProc1.StartInfo.RedirectStandardOutput = true;
      MyProc1.StartInfo.UseShellExecute = false;
      MyProc1.Start();
      MyProc1.WaitForExit();
      MyProc1.Close();

      Process MyProc2 = new Process();
      MyProc2.StartInfo.FileName = @"STATV.EXE";
      MyProc2.StartInfo.CreateNoWindow = true;
      MyProc2.StartInfo.RedirectStandardOutput = true;
      MyProc2.StartInfo.UseShellExecute = false;
      MyProc2.Start();
      MyProc2.WaitForExit();
      MyProc2.Close();
    }
  }


Автор: Sasha13 14.4.2009, 20:54
Спасибо большое DVariuS. Твой код почти работает, окна действительно не появляются. Только на каждый запуск STATV.EXE и VZAIM.EXE выскакивает сообщение об ошибке


 http://ipicture.ru/ 


как с этим бороться ???

Автор: Sasha13 14.4.2009, 21:38
Большое спасибо всем. И отдельное DVariuS. Ваш код правильно направил мои поиски. А сделать то о чем я говорил, как оказалось очень просто:

Код

    class RaschetVzaimodeisvia
    {
        public void GetForce(string path_to_REZ, string path_to_SILA)
        {
            Process MyProc1 = new Process();
            MyProc1.StartInfo.FileName = @"STATV.EXE";
            MyProc1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            MyProc1.Start();
            MyProc1.WaitForExit();
            MyProc1.Close();

            Process MyProc2 = new Process();
            MyProc2.StartInfo.FileName = @"VZAIM.EXE";
            MyProc2.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            MyProc2.Start();
            MyProc2.WaitForExit();
            MyProc2.Close();
        }
    }


Нужно было сделать
MyProc1.Start();
после
MyProc1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
И всего-то))))))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)