Delphi 从服务安全关闭应用程序

Delphi 从服务安全关闭应用程序,delphi,winapi,delphi-xe8,Delphi,Winapi,Delphi Xe8,我在Delphi中有两个程序-一个服务和一些可以在任何用户会话中运行的子进程(这些程序在服务启动时启动,在服务停止时应该关闭) 当服务停止时,我必须安全地关闭子应用程序,使它们捕获formClose/FormDestroy事件 该服务无法使用桌面通信,因此无法向这些进程发送WM,如WM_Close等 调用TerminateProcess不会使formClose/FormDestroy事件发生在我的子进程中 那么,这里可以使用什么样的子进程终止方法呢 目前,我们唯一的想法是在每个用户会话中运行ta

我在Delphi中有两个程序-一个服务和一些可以在任何用户会话中运行的子进程(这些程序在服务启动时启动,在服务停止时应该关闭)

当服务停止时,我必须安全地关闭子应用程序,使它们捕获formClose/FormDestroy事件

该服务无法使用桌面通信,因此无法向这些进程发送WM,如WM_Close等

调用TerminateProcess不会使formClose/FormDestroy事件发生在我的子进程中

那么,这里可以使用什么样的子进程终止方法呢


目前,我们唯一的想法是在每个用户会话中运行taskkill.exe/im process.exe,这会让被杀死的进程运行formClose/FormDestroy。它是如何工作的?只需发送WM_CLOSE?

最好的解决方案是一些简单的IPC。在这种情况下,您真正需要的只是一个全局手动重置事件对象,正如IInspectable已经建议的那样


但是,如果不允许您以正确的方式执行此操作,您可以启动另一个子进程,向要关闭的应用程序发送窗口消息。

那么,在单个服务和桌面应用程序之间不存在IPC吗?如果它们是通过管道/套接字/映射或任何服务直接与客户端对话并指示其在停止事件期间自行关闭的方式链接的。看起来是这样的:实现IPC并要求进程关闭只需在全局命名空间中使用手动重设。当需要关闭时,发出该事件的信号,并让客户端关闭响应。“我们试图在没有[IPC]的情况下构建它”有点令人担忧。您不能忽略IPC,而希望以“安全”的方式终止客户端。你需要挑选。