我们的部分应用涉及向第三方产品注册插件。当第三方服务正在运行时,它已加载我们的DLL,因此磁盘上的文件被锁定。
因此,当我们卸载产品时,我们需要先停止第三方服务,然后在完成卸载后重新启动它。 (我们在安装时也会执行相同的停止/重启事项,因为如果这是升级,则会再次锁定现有文件。)
WiX有一个处理快乐路径的命令,没问题:
<ServiceControl Id="SomeUniqueId" Name="NameOfTheirService"
Start="both" Stop="both"/>
即,在安装和卸载开始时停止服务,并在安装和卸载结束时重新启动它。到目前为止一切都很好。
如果最终用户首先卸载第三方应用,然后尝试卸载我们的应用,则会出现问题。我们的应用程序不适用于第三方服务,但如果用户想要同时卸载它们,则没有什么可以迫使他们按特定顺序执行此操作。但是,如果不再安装第三方服务,那么我们的卸载程序:
换句话说,WiX的错误处理是错误的。停止服务应该是容错的,事实就是如此。在安装之后启动服务可能是不容忍的;没关系:如果服务无法启动,我的安装失败。但是,在 uninstall 之后启动服务应该是容错的,而不是。
如果该服务不再存在,如何在卸载后重启服务而不会失败?
答案 0 :(得分:0)
如果您将 Wait 属性添加到 SeviceControl 元素并将其设置为 no ,那么以及“重试”和“取消”您还将获得一个“忽略”按钮,用户可以单击该按钮继续安装/卸载而无需启动/停止服务。