带有Process的InvalidOperationException

Mor*_* M. 8 c# process invalidoperationexception

我正在使用以下代码启动一个新进程:

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);
Run Code Online (Sandbox Code Playgroud)

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

InvalidOperationException(进程必须在确定请求的信息之前退出...).

知道为什么我得到这个例外吗?

谢谢.

Dre*_*wen 15

根据MSDN,"该Kill方法异步执行.调用Kill方法后,调用WaitForExit方法等待进程退出,或检查HasExited属性以确定进程是否已退出."

换句话说,仅仅因为Kill回报并不意味着过程实际上已经消失.你需要打电话WaitForExit才能等到这个过程真的消失了.

  • 我遇到了在`WaitForExit()`之后仍然发生异常的问题.只有一个`while(!process.HasExited)Thread.Sleep(5);`最终把我救了出来.你认为这正是`WaitForExit()`的作用,但显然不是. (6认同)
  • 当然,如果所有其他方法均失败,则可以始终定义一个“ Int32?在p.WaitForExit()之后添加exitcode = null;然后创建一个while(!exitCode.HasValue)循环,其中包含一个try-catch,该循环将p.ExitCode提取到可为空的var中,仅捕获InvalidOperationException,并且在catch部分有5毫秒的线程休眠。 (2认同)