Winapi WIX:升级期间无法停止windows服务

Winapi WIX:升级期间无法停止windows服务,winapi,service,wix,windows-installer,upgrade,Winapi,Service,Wix,Windows Installer,Upgrade,我有两个程序版本: V0.0.1-我使用Visual Studio 2005和wix v3.5创建MSI安装程序。 V0.0.2-我使用Visual Studio 2013和wix v3.9创建MSI安装程序。 在这两个版本中,我都想安装一个Windows服务。问题是,当我在V0.0.1上安装V0.0.2时,V0.0.1的服务不会停止,安装会以错误结束。我非常确定,停止消息根本不是通过ControlServiceV0.0.2的msiexec发送的,因为我使用Windbg调试了它。 在V0.0.1

我有两个程序版本:

V0.0.1-我使用Visual Studio 2005和wix v3.5创建MSI安装程序。 V0.0.2-我使用Visual Studio 2013和wix v3.9创建MSI安装程序。 在这两个版本中,我都想安装一个Windows服务。问题是,当我在V0.0.1上安装V0.0.2时,V0.0.1的服务不会停止,安装会以错误结束。我非常确定,停止消息根本不是通过ControlServiceV0.0.2的msiexec发送的,因为我使用Windbg调试了它。 在V0.0.1上安装V0.0.1工作正常,并成功发送停止消息

这是InstallationFiles.wxi中的ServiceControl代码。与两个版本相同。在本网站的帮助下编写


在这种情况下,CustomAction与此无关

请注意,安装时删除/停止/启动|卸载|都是指组件的安装状态,而不是产品。我看不出这些元素与什么组件/功能相关,但如果这些组件没有作为升级的一部分安装,那么停止将不会发生。

正如Chris所说,您需要对组件进行分类,确保它们已安装,并显示您的ServiceInstall代码。人们在ServiceInstall中使用一个名称,在ServiceControl中使用另一个名称是很正常的,这是行不通的。谢谢您的回答。我不知道如何检查该组件是否已安装。记录升级指示。您需要阅读一些主题,如次要升级与主要升级以及默认文件版本控制规则。MSDN主题
     <ServiceControl Id="MyService.exe.Control" Name="MyService" Remove="uninstall" Stop="both" Start="install" Wait="yes">
    <ServiceArgument>InstallerStart</ServiceArgument>
  </ServiceControl>