C#:将外部控制台程序作为隐藏运行

时间:2010-12-13 15:40:46

标签: c# process console

任何人都可以告诉我如何从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

2 个答案:

答案 0 :(得分:34)

您缺少 CreateNoWindow 属性,在您的情况下必须将其设置为 true

答案 1 :(得分: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();