如何在不使用CloseMainWindow的情况下优雅地结束进程

时间:2018-03-05 14:07:43

标签: c# winapi process

有没有办法在不使用Process.CloseMainWindow()的情况下优雅地结束流程?

我在列表中有一堆进程,我想结束。该过程应在没有Process.Kill()的情况下结束,以确保它们清理并结束其子进程。 我尝试了 CloseMainWindow ,但遗憾的是它会让我的进程弹出一个带有&#34的消息框;你真的想要结束该程序吗?" [是] [否]我想要避免。

进程有WM_QUERYENDSESSION的消息处理程序,但是当我尝试向进程发送WM_QUERYENDSESSION消息时,它没有做出反应。它只对WM_QUIT作出反应,但行为看起来就像调用Process.Kill()时的行为。

我还没找到合适的解决方案。希望我没有忽视这里的事情......

2 个答案:

答案 0 :(得分:1)

发送WM_CLOSE消息与单击窗口上的关闭按钮几乎相同。应用程序将能够阻止此请求或设置“保存更改”确认对话框。

除此之外的任何事情都可能导致数据丢失。 WM_QUIT不是您应该发送的内容。

WM_QUERYENDSESSION是一个查询,您先发送,然后发送WM_ENDSESSION,但并非所有应用程序都会处理这些消息。

Win32没有主窗口属性,它是一个.NET概念。

如果您计划在完成任何操作后再次重新启动这些应用程序,那么您应该研究的是重启管理器功能。

答案 1 :(得分:0)

过了一段时间,我承认这个明确的问题似乎没有真正的答案。

由于我控制了这两个部分,我刚刚删除了"你真的想退出吗?"弹出如IInspectable假设,并通过打开的管道向子进程发送消息,如Sefe假设。