c# - RedirectStandardOutput 阻止引发 Process.Exited 事件?

标签 c# process

我想要的只是将一个进程的标准输出重定向到一个文件。听起来很简单,但我尝试的一切都不起作用:

  1. 将 DOS 风格的重定向放在参数列表中(例如 param1 param2 > output.txt)不起作用;

  2. 使用 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/

相关文章:

c# - 在 Windows Server 2008 R2 和 IIS7.5 中托管 WCF

c# - 最小起订量:无法类型转换

c# - SingleOrDefault() 的最佳实践

ruby - 如何触发并忘记子流程?

java - 从在 java 中执行的 shellscript 运行时 ffmpeg 中的段错误

java - 打印Java Process Inputstream的原始格式

Android low memory killer & application back stack

c# - 快速增加内存使用率C#

Java的Process.exec,有没有更好的处理方法?

c# - Entity Framework Core 中的内存管理