0

我在使用 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. 1.2 尝试替换可执行文件,但一个进程仍在运行可执行文件。

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

我已经在 1.2 安装程序中尝试过任何可能的 ServiceControl 配置,但如果上述步骤正确,它就没有用了。

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

4

1 回答 1

0

在评论之后,这些是可能的解决方案:

  • 在这个SO question之后为 1.1 安装程序创建一个补丁
  • 使用Schedule="afterInstallExecute"MajorUpgrade 中的属性。如果组件定义良好并且文件版本正确,这可能会起作用。
  • 通知用户停止服务。
于 2017-01-31T13:19:02.893 回答