2009-12-03 73 views
2

一部分涉及注册插件的第三方产品重新启动服务。当第三方服务正在运行时,它会加载我们的DLL,因此磁盘上的文件被锁定。WiX的卸载程序:如果我们的应用程序的当前

因此,当我们卸载我们的产品,我们需要停止第三方服务开始,然后重新启动它,当我们与卸载完成。 (我们也做同样的停止/恢复的事情在安装时,因为如果这是升级,那么现有的文件将被再次锁定)

维克斯有处理的幸福路径的命令,没有问题:

<ServiceControl Id="SomeUniqueId" Name="NameOfTheirService" 
       Start="both" Stop="both"/> 

即在两个安装和卸载开始停止服务,并在这两个安装和卸载年底重新启动。到现在为止还挺好。

问题就来了,如果最终用户首先卸载第三方应用程序,然后尝试卸载我们的应用程序。我们的应用程序不会与第三方服务一起使用,但如果用户想要同时卸载它们,则没有任何事情可以强制他们按特定顺序进行操作。但是,如果不再安装的第三方服务,那么我们的卸载程序:

  1. 试图阻止第三方服务失败,因为该服务不再存在,决定了失败并不重要,并继续。
  2. 卸载我们的产品。
  3. 尝试重新启动第三方服务失败,因为该服务不再存在,决定这个失败重要的,并提出一个错误对话框说:“服务'NameOfTheirService'(NameOfTheirService)无法启动。你有足够的权限来启动系统服务。“ (重试/取消)
  4. 如果用户单击重试,转到3.
  5. 如果用户单击取消,回滚并取消卸载。

换句话说,维克斯的错误处理是错误的。停止服务应该是容错的,而且是。 安装后启动服务可能是不能容忍的;这很好:如果服务无法启动,则无法安装。但在卸载后启动服务应该是容错的,而不是。

如何卸载后重新启动服务,如果该服务不再存在则不卸载?

回答

0

如果您在等待属性添加到SeviceControl元素,并将其设置为没有然后还有“重试”和“取消”,您还可以得到一个“忽略”按钮,用户能单击以继续安装/卸载而不启动/停止服务。

相关问题