要从服务中关闭的托盘图标应用程序

Tray icon app to be closed from service

所以这个标题是不言自明的。

我有一个用 C++ 编写的服务,它使用 CreateProcessAsUser 创建了一个托盘图标,一切似乎都运行良好。

停止服务时出现问题,我也想停止托盘图标应用程序,但这必须小心地完成,因为该应用程序可能会收到一些必须在退出前保存到文件中的数据。

如果有用,可以使用wxWidgets API,但是现在所有进程的创建都是用Windows API,甚至托盘图标本身也是用wxWiidgets制作的介意,还有服务。

欢迎任何建议!

托盘应用需要一种在正常退出时接收信号的方法。

如果托盘应用程序已经有 window,您可以向其发送 WM_CLOSEWM_QUIT 消息。 Window 消息不能跨越会话边界发送。但是,如果您可以更改托盘应用程序,则可以让它接受一个可选的命令行参数,该参数仅将消息发送到该应用程序的前一个实例,然后退出。然后该服务可以 运行 在需要时使用该参数创建应用程序的新实例。或者,如果您无法更改该应用程序,则只需 运行 您自己的服务 EXE 的第二个实例,或您编写的另一个辅助应用程序。

否则,如果托盘应用程序还没有 window,但您可以更改应用程序,然后添加一个隐藏的 window。或者更好的是,添加另一种 IPC 机制,例如通过应用程序可以等待的 CreateEvent() 命名的内核事件,或者管道或套接字等。服务可以直接向其发送信号的东西。

否则,如果您无法更改任务栏应用程序,并且它没有可以向其发送消息的 window,那么您将无法使用 TerminateProcess(),这不是优雅。