我们的产品安装程序的较旧版本在卸载时使用Wix以外的其他方式“忘记”了,以注销已安装的服务。
如果我们运行当前的安装程序(使用Wix),则在要安装该服务时会显示“访问被拒绝”。
为了解决这个问题,我在安装服务的组件中添加了以下内容:
<RemoveRegistryKey Id="ServiceRegistrationRouter" Action="removeOnInstall" Key="SYSTEM\CurrentControlSet\services\Router" Root="HKLM"/>
“ RemoveRegistryValues”(序列2600)排定在“ InstallServices”(序列5800)之前,因此应该清除挥之不去的注册表项。
这就像一种魅力,但我仍然收到“访问被拒绝”的提示。因此,即使注册表项消失了,Windows仍然保留该服务。
我知道'sc delete'可以解决问题,但如果可能的话,我想避免进行自定义操作。
有可能吗?
答案 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>