托盘图标应用程序将关闭服务

时间:2018-08-01 13:34:02

标签: c++ windows service wxwidgets tray

所以标题很容易解释。

我有一个用C ++编写的服务,该服务使用CreateProcessAsUser创建任务栏图标,并且一切正常。

问题是在停止服务时出现的,我也想停止任务栏图标应用程序,但这必须轻而易举地完成,因为该应用程序可能会收到一些必须在退出前保存到文件的数据。

如果有用,可以使用wxWidgets API,但是现在所有的过程创建都是通过Windows API进行的,甚至托盘图标本身也是考虑到wxWiidgets以及服务的。

欢迎任何建议!

1 个答案:

答案 0 :(得分:0)

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

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

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

否则,如果您无法更改任务栏应用程序,并且没有窗口可以向其发送消息,则您将无法使用TerminateProcess(),这很麻烦。