【发布时间】:2012-02-28 15:11:32
【问题描述】:
我有一个可执行文件,当我手动运行它时它运行良好,并且它存在于预期的输出中。但是当我用下面的方法运行它时, Process.Exited 事件永远不会被触发。请注意,我记得 Process.EnableRaisingEvents
protected override Result Execute(RunExecutable task)
{
var process = new Process();
process.StartInfo.Arguments = task.Arguments;
process.StartInfo.FileName = task.ExecutablePath;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.EnableRaisingEvents = true;
process.Exited += (sender, args) =>
{
processSync.OnNext(new Result
{
Success = process.ExitCode == 0,
Message = process.StandardOutput.ReadToEnd()
});
processSync.OnCompleted();
};
process.Start();
return processSync.First();;
}
问题是一样的,如果我使用 Process.WaitForExit() 而不是响应式扩展,来等待退出事件。
另外,如果我使用另一个参数运行该过程,从而产生另一个输出,它就可以正常存在。
这似乎与process.StartInfo.RedirectStandardOutput = true; 有关,因为当我禁用它时,它可以工作。但这可能只是另一个问题的征兆。
任何帮助表示赞赏:-)
【问题讨论】: