我想要的只是将一个进程的标准输出重定向到一个文件。听起来很简单,但我尝试的一切都不起作用:
将 DOS 风格的重定向放在参数列表中(例如
param1 param2 > output.txt
)不起作用;使用
RedirectStandardOutput = true
有效,但是,显然该进程在事件存在时不会引发事件。因此,通过process.Exited += ...
定义的处理程序不会执行。需要明确的是,一旦我删除了RedirectStandardOutput = true
语句,它就会引发一个事件。
我做错了什么?
最佳答案
方法#2 必须要走的路。
问题似乎是由阻止触发 Exited
事件的输出缓冲引起的。
您应该考虑删除 Exited
事件处理程序。相反,订阅 OutputDataReceived
事件并检查处理程序中的 Process.HasExited
属性以执行清理作业:
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
...
void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Process p = (Process) sender;
if(p.HasExited) ...
}
关于c# - RedirectStandardOutput 阻止引发 Process.Exited 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12877188/