Winapi util:CloseApplication from Windows服务

Winapi util:CloseApplication from Windows服务,winapi,wix,windows-installer,Winapi,Wix,Windows Installer,我正在更新应用程序时尝试关闭“托盘应用程序”。从“Windows服务”关闭托盘的功能如下所示: <util:CloseApplication Id="CloseTrayAgent" Target="$(var.TrayAgentBinName).exe" RebootPrompt="no" CloseMessage="yes" Description="Tray application is still running"/> <InstallExecut

我正在更新应用程序时尝试关闭“托盘应用程序”。从“Windows服务”关闭托盘的功能如下所示:

<util:CloseApplication 
  Id="CloseTrayAgent"
  Target="$(var.TrayAgentBinName).exe"
  RebootPrompt="no"
  CloseMessage="yes"
  Description="Tray application is still running"/>

<InstallExecuteSequence>
  <Custom Action="WixCloseApplications" Before="RemoveFiles" />
</InstallExecuteSequence>

如果从“用户”(仅从用户控制台)调用更新,则该场景有效,但如果从“Windows服务”调用更新,则该场景无效。 我检查了msi日志,但在我看来没有错误


我的错在哪里?谢谢。

服务在会话0中运行,该会话与交互式桌面会话隔离。本文明确指出了使用SendMessage等API向交互会话中运行的应用程序发送消息的服务存在的问题:


搜索-服务会话隔离-或-会话0-将提供更多信息

您是否尝试过任何其他关闭选项,例如。g
ElevatedCloseMessage
EndSessionMessage
ElevatedEndSessionMessage
?是的,我已经检查了所有这些邮件。。。(EndSessionMessage=“yes”,ElevatedCloseMessage=“yes”,ElevatedEndSessionMessage=“yes”,CloseMessage=“yes”)正在考虑它。因此,无法将windows消息从服务发送到托盘应用程序。你必须使用另一种机制,例如。G在全局命名空间中创建的。您可以在DLL自定义操作中创建此事件。令人沮丧的是wixtoolset没有实现此目标的功能。这就是我现在想要做的。。。winapi事件+自定义操作+*.dllI建议,因为从服务运行更新安装程序是非常常见的用例。可能可以扩展
CloseApplication
,以支持设置事件。类似于
CloseEvent=“MyEventName”