C#:以隐藏方式运行外部控制台程序

C#:以隐藏方式运行外部控制台程序,c#,process,console,C#,Process,Console,有谁能告诉我如何从Winforms应用程序生成另一个控制台应用程序,但是(a)不在屏幕上显示控制台窗口,并且(B)仍然获得应用程序的标准输出?目前我有以下几点: Process SomeProgram = new Process(); SomeProgram.StartInfo.FileName = @"c:\foo.exe"; SomeProgram.StartInfo.Arguments = "bar"; SomeProgram.StartInfo.WindowStyle =

有谁能告诉我如何从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您缺少CreateNoWindow属性,在您的情况下,该属性必须设置为true

我认为它将帮助您:

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();

当前解决方案有什么问题?上面的解决方案确实可以让我获得控制台应用程序的输出,但窗口没有隐藏。如果我删除用于获取标准输出的代码,则窗口将隐藏。我希望隐藏窗口并获得标准输出。啊,非常感谢Stefan,这正是我要寻找的。@JamesPD如果Stefan的答案是解决您问题的答案,您可以奖励他,并通过接受他的答案来标记它-单击他答案左侧的空心勾号。