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.2 安装程序检测到现有产品(由于升级代码)
- 卸载旧产品
- 由于 1.1 安装程序
中的错误,该服务未 stopped/uninstalled
- 1.2 尝试替换可执行文件,但进程仍然是 运行 可执行文件。
请注意,我已经使用 Orca 调整了 1.1 安装程序以获得正确的 ServiceControl,它会在卸载时停止并删除服务。我们称之为 1.1tweaked。如果我使用 1.1tweaked 安装产品,然后使用我的 1.2 安装程序,那么一切都会按预期工作。
我已经尝试过在1.2安装包中对ServiceControl进行任何可能的配置,但是如果上面的步骤是正确的,那是没有用的。
如何强制停止 1.2 安装程序中的 "current" Windows 服务?
看起来我需要一个自定义操作。有任何想法吗?谢谢
根据评论,这些是可能的解决方案:
- 按照此
为 1.1 安装程序创建补丁
- 在 MajorUpgrade 中使用属性
Schedule="afterInstallExecute"
。如果组件定义明确且文件版本正确,这可能会起作用。
- 通知用户停止服务。
我在使用 Wix 3.7 构建的安装程序时遇到问题。我有一个安装了 Windows 服务的产品。 问题是在产品升级期间(从 1.1 版到 1.2 版,使用相同的 UpgradeCode,不同的 ProductCode Guid 和 MajorUpgrade 属性)我想用服务替换可执行文件 运行。该文件正在被旧进程(即 Windows 服务)使用。 我怀疑 1.1 安装程序用于卸载 1.1 产品,并且在该安装程序中 ServiceControl 无效(即未设置为在卸载时停止)。
我的猜测:
- 1.2 安装程序检测到现有产品(由于升级代码)
- 卸载旧产品
- 由于 1.1 安装程序 中的错误,该服务未 stopped/uninstalled
- 1.2 尝试替换可执行文件,但进程仍然是 运行 可执行文件。
请注意,我已经使用 Orca 调整了 1.1 安装程序以获得正确的 ServiceControl,它会在卸载时停止并删除服务。我们称之为 1.1tweaked。如果我使用 1.1tweaked 安装产品,然后使用我的 1.2 安装程序,那么一切都会按预期工作。
我已经尝试过在1.2安装包中对ServiceControl进行任何可能的配置,但是如果上面的步骤是正确的,那是没有用的。
如何强制停止 1.2 安装程序中的 "current" Windows 服务? 看起来我需要一个自定义操作。有任何想法吗?谢谢
根据评论,这些是可能的解决方案:
- 按照此
- 在 MajorUpgrade 中使用属性
Schedule="afterInstallExecute"
。如果组件定义明确且文件版本正确,这可能会起作用。 - 通知用户停止服务。