С#: запустить внешнюю консольную программу как скрытую

может ли кто-нибудь сказать мне, как создать другое консольное приложение из приложения Winforms, но (A) не отображать окно консоли на экране и (B) все еще получать стандартный вывод приложения? В настоящее время у меня есть что-то вроде следующего:

  Process SomeProgram = new Process();
  SomeProgram.StartInfo.FileName = @"c:\foo.exe";
  SomeProgram.StartInfo.Arguments = "bar";
  SomeProgram.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
  SomeProgram.StartInfo.UseShellExecute = false;
  SomeProgram.StartInfo.RedirectStandardOutput = true;
  SomeProgram.Start();
  SomeProgram.WaitForExit();
  string SomeProgramOutput = SomeProgram.StandardOutput.ReadToEnd();

Если я установил RedirectStandardOutput в false, консольное приложение будет скрыто, как ожидалось, но я не могу получить стандартный выходной текст. Однако, как только я установил RedirectStandardOutput в true, окно перестает скрываться, хотя я могу получить выход программы.

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

Многие TIA

Ответы

Ответ 1

Вам не хватает свойства CreateNoWindow, которое должно быть установлено в true в вашем случае.

Ответ 2

Я думаю, это поможет вам:

System.Diagnostics.Process pProcess = new System.Diagnostics.Process();
pProcess.StartInfo.FileName = @"C:\Users\Vitor\ConsoleApplication1.exe";
pProcess.StartInfo.Arguments = "olaa"; //argument
pProcess.StartInfo.UseShellExecute = false;
pProcess.StartInfo.RedirectStandardOutput = true;
pProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
pProcess.StartInfo.CreateNoWindow = true; //not diplay a windows
pProcess.Start();
string output = pProcess.StandardOutput.ReadToEnd(); //The output result
pProcess.WaitForExit();