在C#中捕获进程的STDOUT

时间:2014-02-02 19:47:56

标签: c# .net command-line process stdout

我在我的软件中使用了2个不同的过程。在这两种情况下,我都会读取过程输出,然后给用户一些关于它的指示。

ProcessStartInfo si = new ProcessStartInfo();

si.WindowStyle = ProcessWindowStyle.Hidden;
si.UseShellExecute = false;
si.CreateNoWindow = true;
si.RedirectStandardError = true;
si.RedirectStandardOutput = true;

si.FileName = "proc.exe";
si.Arguments = "some args";

Process p = new Process();
p.StartInfo = si;
p.ErrorDataReceived += cmd_Error;
p.OutputDataReceived += cmd_DataReceived;
p.EnableRaisingEvents = true;

p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();

p.WaitForExit();

在第一种情况下,它完美无缺! 但在另一种情况下,该过程正在完成其工作,但只有终止事件被触发。 使用

运行时
si.WindowStyle = ProcessWindowStyle.Normal

我看到这个过程有一个输出。

可能是什么问题?为什么输出事件没有被触发?

1 个答案:

答案 0 :(得分:1)

因此,如果一个进程有效,但另一个进程无效,您确定其他进程实际上是在写入stdout吗?

快速测试可以确认。使用以下语法从命令行运行它;

myprocess.exe> output.txt的

如果output.txt为空,那么它不会写入stdout并且您的程序运行正常。