我正在使用以下代码开始新流程:
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(进程必须在请求之前退出 信息可以确定......)。
知道为什么我得到这个例外吗?
谢谢。
答案 0 :(得分:13)
根据MSDN,“Kill
方法异步执行。调用Kill
方法后,调用WaitForExit
方法等待进程退出,或检查HasExited
属性以确定进程是否已退出。“
换句话说,仅仅因为Kill
返回并不意味着该过程实际上已经消失。您需要致电WaitForExit
等待该过程实际消失。
答案 1 :(得分:-1)
只有在进程退出后才能确定进程的某些属性(例如HasExited)。因此错误。
我建议使用try / catch块来发生异常。