我需要生成一个子进程,它是一个控制台应用,并捕获其输出。
我为一个方法编写了以下代码:
string retMessage = String.Empty;
ProcessStartInfo startInfo = new ProcessStartInfo();
Process p = new Process();
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;
startInfo.UseShellExecute = false;
startInfo.Arguments = command;
startInfo.FileName = exec;
p.StartInfo = startInfo;
p.Start();
p.OutputDataReceived += new DataReceivedEventHandler
(
delegate(object sender, DataReceivedEventArgs e)
{
using (StreamReader output = p.StandardOutput)
{
retMessage = output.ReadToEnd();
}
}
);
p.WaitForExit();
return retMessage;
但是,这不会返回任何东西。我不相信 OutputDataReceived
事件被回调,或者 WaitForExit()
命令可能阻塞了线程,所以它永远不会回调。
有什么建议吗?
编辑: 看起来我对复试太用力了:
return p.StandardOutput.ReadToEnd();
看起来没问题。