我有一些像这样的代码:
process.CloseMainWindow();
if (!process.WaitForExit(5000)) { process.Kill(); }
这个想法是让流程优雅地退出,但如果花费的时间超过5秒,我认为它需要被杀死。
这似乎适用于大多数情况,但如果进程抛出了一条Windows错误消息,它就会挂起。我以前只有“process.Kill()”并且有效,所以我不得不假设它实际上卡在WaitForExit(5000)调用上,即使我给它一个超时值。
这会发生什么原因?
编辑:我想知道是否可能是由于该错误消息而实际挂起的CloseMainWindow()。在这种情况下,在尝试CloseMainWindow()方法之前检查进程的“响应”属性实际返回“false”?如果是这样,我可以检查一下然后使用Kill,如果是这样的话。答案 0 :(得分:0)
首先,我要感谢Marc这样做的麻烦,我甚至从未想过我能以这种方式重现错误。
无论如何,在仔细阅读CloseMainWindow()的帮助文件之后,我看到了:
Return Value
Type: System.Boolean
true if the close message was successfully sent; false if the associated
process does not have a main window or if the main window is disabled (for
example if a modal dialog is being shown).
就在那里,它说模态对话框(例如我看到的错误)会导致这个问题。现在我不确定它为什么不会在超时后失败然后被杀死,但我想我可以使用这个返回值来杀死这个场景中的进程。