我有一个进程,希望能够从外部进程中完全关闭。也就是说,我想给它一个机会,使其在死亡之前清理资源(保存数据等)。
Process.CloseMainWindow
似乎是普通的处理方式,除了所讨论的进程没有任何窗口,并且我不想立即调用Process.Kill
因为我想给它机会首先清理(并且kill进程命令不能被目标进程拦截)。</ p>
那么让我的进程与另一个进程完全关闭的最佳方法是什么?
我对这两个过程都有控制权。要关闭的进程确实有一个消息循环(Application.Run()
),所以我认为可能会有一些消息可以在此发布。
我已经阅读了msdn article on terminating processes和this article about closing processes cleanly,但是尽管我尝试实现的方法很简单,但它们都提到了相当复杂的方法。鉴于我对这两个过程都有控制权,所以我希望可以在C#中完全实现一些简单的操作。有一个吗?
关闭过程不是服务,因此无法停止服务。
答案 0 :(得分:0)
我不确定.NET消息循环是否支持线程消息,或仅支持窗口消息。如果它支持线程消息,则终止应用程序可以使用PostThreadMessage()
向目标进程的主线程发布WM_QUIT
消息(或消息循环可以查找的自定义消息),以便停止其消息循环并退出应用。
否则,让目标应用使用EventWaitHandle
创建一个命名的内核事件对象,然后等待该事件,方法是在手动线程中调用EventWaitHandle.WaitOne()
或调用ThreadPool.RegisterWaitForSingleObject()
系统提供的线程池。发出事件信号后,您可以通知主线程退出应用程序。然后,终止应用可以使用EventWaitHandle.OpenExisting()
按名称打开事件对象,然后使用EventWaitHandle.Set()
发出事件信号。