11

我正在使用以下代码开始一个新进程:

Process p = new Process();
p.StartInfo.FileName = "...";
p.StartInfo.Arguments = "...";
p.Start();
p.WaitForExit(300000); // 5 minutes

if (!p.HasExited) 
    p.Kill();
Console.Write(p.ExitCode);

当该过程在 5 分钟内结束时,这是有效的,但当它没有时,我得到

InvalidOperationException(进程必须退出才能确定请求的信息...)。

知道为什么我会收到此异常吗?

谢谢你。

4

2 回答 2

17

根据MSDN,“Kill方法异步执行。调用Kill方法后,调用WaitForExit方法等待进程退出,或者检查HasExited属性判断进程是否退出。”

换句话说,仅仅因为Kill退货并不意味着该过程实际上已经消失。您需要打电话WaitForExit等到该过程实际上消失了。

于 2013-08-01T14:03:49.483 回答
-1

进程的某些属性(例如 HasExited)只能在进程退出后才能确定。因此错误。

我建议有一个 try/catch 块来让异常发生。

于 2013-08-01T14:04:10.627 回答