我正在尝试捕获从.net应用程序启动的外部程序(其控制台应用程序)的输出。这是开始的方式。
var process = new Process();
process.StartInfo = new ProcessStartInfo
{
FileName = "c:\app.exe,
Arguments = "-x 0 -server http://foo.com",
RedirectStandardOutput = true,
RedirectStandardInput = true,
RedirectStandardError = true,
UseShellExecute = false
};
process.Start();
process.OutputDataReceived += Process_OutputDataReceived;
process.ErrorDataReceived += Process_ErrorDataReceived;
process.BeginOutputReadLine();
process.WaitForExit();
此控制台应用程序一直运行到手动停止,并不断向控制台窗口中写入内容。我想做的是从控制台捕获输出,如果有一行,如果说“ ERROR”,我将重新启动该过程。
上面的代码不起作用。仅当我关闭app.exe控制台窗口时才会调用Process_OutputDataReceived
。
我想我可以将输出写入某个文件并分析该文件,但是我对此不太喜欢,因为我需要每秒打开/读取该文件。
在将app.exe的输出写入控制台时,是否有办法捕获它?
编辑:
将输出写入文件是选项,但是文件会变得非常非常大,直到我收到“ ERROR”一行,只有到那时我才会重新启动该过程并删除文件。每秒打开/读取几张100MB +的文件,直到那时才不是我想要的方式。
答案 0 :(得分:0)
在您的Process_OutputDataReceived方法实现中,在如下数据中查找“ ERROR”:
parent