Как мне запускать процессы синхронно, ориентируясь на один и тот же результат?

У меня есть приложение .Net, которому нужно запустить несколько исполняемых файлов. Я использую класс Process, но Process.Start не блокируется. Мне нужно, чтобы первый процесс завершился до второго запуска. Как я могу это сделать?

Кроме того, я бы хотел, чтобы все процессы выводились в одно и то же окно консоли. Как бы то ни было, они как бы открывают свои окна. Я уверен, что могу использовать поток StandardOutput для записи в консоль, но как я могу подавить вывод по умолчанию?


person Mike Pateras    schedule 22.06.2010    source источник


Ответы (1)


Я считаю, что вы ищете:

Process p = Process.Start("myapp.exe");
p.WaitForExit();

Для вывода:

StreamReader stdOut = p.StandardOutput;

Затем вы используете его как любой потоковый ридер.

Подавить окно немного сложнее:

ProcessStartInfo pi = new ProcessStartInfo("myapp.exe");
pi.CreateNoWindow = true;
pi.UseShellExecute = true;

// Also, for the std in/out you have to start it this way too to override:
pi.RedirectStandardOutput = true; // Will enable .StandardOutput

Process p = Process.Start(pi);
person Aren    schedule 22.06.2010
comment
Идеально! Есть идеи по выходу? - person Mike Pateras; 22.06.2010
comment
Но как мне подавить всплывающее окно консоли для каждого процесса? - person Mike Pateras; 22.06.2010
comment
Теперь у меня все работает. Спасибо за помощь. Следует отметить, что я получил исключение, когда для RedirectStandardOutput и UseShellExecute было установлено значение true. Кроме того, как только я перенаправил вывод, я больше не мог использовать WaitForExit. Он будет блокироваться на неопределенный срок. Однако чтение из StandardOutput решает эту проблему. - person Mike Pateras; 22.06.2010
comment
Да, прошло много времени с тех пор, как я им пользовался, рад, что у тебя все заработало. - person Aren; 23.06.2010
comment
Вам необходимо установить для UseShellExecute значение true, чтобы Verb соблюдался, и для него должно быть установлено значение false, чтобы перенаправить стандартный вывод. Вы не можете сделать и то, и другое. Я почти уверен, что Windows также не позволит вам перенаправить стандартный ввод / вывод / ошибку через границу безопасности администратора / не администратора. Вам нужно будет найти другой способ получить вывод из программы, запущенной от имени администратора - Ссылка: stackoverflow.com/a/8690661 - person Kiquenet; 28.08.2014