我有一些像这样的代码:WaitForExit不会超时正确的,只是挂
process.CloseMainWindow();
if (!process.WaitForExit(5000)) { process.Kill(); }
的想法是优雅地让进程退出,但如果需要超过5秒,我认为它需要杀害。
这似乎在大多数情况下工作,但如果该进程已抛出一个Windows错误消息,它只是挂起。我以前只有“process.Kill()”,并且工作,所以我不得不假定它实际上停留在WaitForExit(5000)调用上,即使我给它一个超时值。
这会发生什么原因?
编辑:我想知道如果可能它是CloseMainWindow()实际挂,因为该错误消息。在这种情况下,在尝试CloseMainWindow()方法之前检查进程的“响应”属性实际返回“false”?如果是这样,我可以检查,然后使用杀死,如果是这样的话。
Windows正在终止进程,因此不会出现退出。 – jdweng
不,过程仍在运行,我可以看到错误框后面的窗口。 –
如果您遇到Marshal.GetLastWin32Error的窗口错误,那么测试如何?如果进程正在运行,只杀死进程。在杀死之前测试过程是否仍然存在。 – jdweng