1

我有一些这样的代码:

process.CloseMainWindow();
if (!process.WaitForExit(5000)) { process.Kill(); }

这个想法是让进程优雅地退出,但如果它需要超过 5 秒,我认为它需要被杀死。

这似乎在大多数情况下都有效,但如果进程抛出了 Windows 错误消息,它就会挂起。我以前只有“process.Kill()”并且有效,所以我必须假设它实际上卡在了 WaitForExit(5000) 调用上,即使我给它一个超时值。

有什么理由会发生这种情况?

编辑:我想知道是否可能是由于该错误消息而实际挂起的 CloseMainWindow() 。在这种情况下,在尝试 CloseMainWindow() 方法之前检查进程的“响应”属性实际上会返回“false”吗?如果是这样,我可以检查一下,然后在这种情况下使用 Kill 。

4

1 回答 1

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).

所以就在那里它说模态对话框(例如我看到的错误)会导致这个问题。现在我不确定为什么它不只是失败然后在超时后无论如何都被杀死,但我认为我可以使用这个返回值来杀死这种情况下的进程。

于 2016-04-14T20:15:51.357 回答