在安装过程中注销Windows服务(Wix)

时间:2019-01-04 08:15:13

标签: wix windows-services

我们的产品安装程序的较旧版本在卸载时使用Wix以外的其他方式“忘记”了,以注销已安装的服务。

如果我们运行当前的安装程序(使用Wix),则在要安装该服务时会显示“访问被拒绝”。

为了解决这个问题,我在安装服务的组件中添加了以下内容:

<RemoveRegistryKey Id="ServiceRegistrationRouter" Action="removeOnInstall" Key="SYSTEM\CurrentControlSet\services\Router" Root="HKLM"/>

“ RemoveRegistryValues”(序列2600)排定在“ InstallServices”(序列5800)之前,因此应该清除挥之不去的注册表项。

这就像一种魅力,但我仍然收到“访问被拒绝”的提示。因此,即使注册表项消失了,Windows仍然保留该服务。

我知道'sc delete'可以解决问题,但如果可能的话,我想避免进行自定义操作。

有可能吗?

1 个答案:

答案 0 :(得分:0)

创建一个单独的Component并将其添加到所需的ComponentGroup中。 看起来像这样:

<Component Id="C_RemoveOldServices" Guid="B7574124-A3A8-4535-A14E-616E5024CA7F" KeyPath="yes">
            <ServiceControl Id="old_service1" Name="Service 1" Remove="install" Wait="no"/>
            <ServiceControl Id="old_service2" Name="Service 2" Remove="install" Wait="no"/>
            <ServiceControl Id="old_service3" Name="Service 3" Remove="install" Wait="no"/>
            <ServiceControl Id="old_service4" Name="Service 4" Remove="install" Wait="no"/>
            <Condition>![CDATA[NOT Installed]]</Condition>
</Component>