Win服务在升级过程中没有停止和卸载

Win service not stopped and uninstalled during upgrade

我在使用 Wix 3.7 构建的安装程序时遇到问题。我有一个安装了 Windows 服务的产品。 问题是在产品升级期间(从 1.1 版到 1.2 版,使用相同的 UpgradeCode,不同的 ProductCode Guid 和 MajorUpgrade 属性)我想用服务替换可执行文件 运行。该文件正在被旧进程(即 Windows 服务)使用。 我怀疑 1.1 安装程序用于卸载 1.1 产品,并且在该安装程序中 ServiceControl 无效(即未设置为在卸载时停止)。

我的猜测:

  1. 1.2 安装程序检测到现有产品(由于升级代码)
  2. 卸载旧产品
  3. 由于 1.1 安装程序
  4. 中的错误,该服务未 stopped/uninstalled
  5. 1.2 尝试替换可执行文件,但进程仍然是 运行 可执行文件。

请注意,我已经使用 Orca 调整了 1.1 安装程序以获得正确的 ServiceControl,它会在卸载时停止并删除服务。我们称之为 1.1tweaked。如果我使用 1.1tweaked 安装产品,然后使用我的 1.2 安装程序,那么一切都会按预期工作。

我已经尝试过在1.2安装包中对ServiceControl进行任何可能的配置,但是如果上面的步骤是正确的,那是没有用的。

如何强制停止 1.2 安装程序中的 "current" Windows 服务? 看起来我需要一个自定义操作。有任何想法吗?谢谢

根据评论,这些是可能的解决方案:

  • 按照此
  • 为 1.1 安装程序创建补丁
  • 在 MajorUpgrade 中使用属性 Schedule="afterInstallExecute"。如果组件定义明确且文件版本正确,这可能会起作用。
  • 通知用户停止服务。