我想要的只是将进程的标准输出重定向到文件。听起来很简单,但我尝试的一切都不起作用:
在参数列表中放置DOS样式的重定向(例如param1 param2 > output.txt
)不起作用;
使用RedirectStandardOutput = true
有效,但是,显然该进程在存在时不会引发事件。因此,通过process.Exited += ...
定义的处理程序不会执行。需要说明的是,一旦我删除RedirectStandardOutput = true
语句,它就会举起一个事件。
我做错了什么?
答案 0 :(得分:1)
方法#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) ...
}