C#: 如何将外部控制台程序隐藏运行

14

请问有人可以告诉我如何从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,窗口就不再被隐藏了,尽管我能够获取程序的输出。因此,我知道如何使控制台应用程序运行隐藏,也知道如何获取程序的输出,但如何同时做到两者呢?谢谢大家。

当前解决方案存在什么问题? - codymanix
上面的解决方案确实让我得到了控制台应用程序的输出,但窗口并没有隐藏。如果我删除获取标准输出的代码,窗口就会被隐藏。我想要窗口被隐藏,并且能够获得标准输出。 - JamesPD
2个回答

34

在您的情况下,您缺少必须设置为trueCreateNoWindow属性。


4
如果Stefan的回答解决了您的问题,您可以通过点击他的回答左边的空心勾选标志来奖励他并将其标记为答案。 - Mark Pim

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接