【发布时间】:2014-05-16 15:19:40
【问题描述】:
所以,我有一个 Windows 服务,它可以在单个服务器上安装多个实例。安装程序需要能够升级单个实例。安装程序使用实例转换,但我不确定如何让主要升级按我的意愿工作。
为了进行重大升级,我的理解是我应该更改产品代码,因此以这种形式定义实例:
<Instance ProductCode="*"
UpgradeCode="{SOMEGUID}"
ProductName="Instance 1"
Id="Instance1"/>
可以通过以下方式启动 msi 以安装新实例:
msiexec.exe /i "installer.msi" TRANSFORMS=:Instance1 MSINEWINSTANCE=1
但是,经过大量搜索后,我发现在特定实例上运行升级的唯一方法是这种格式:
msiexec.exe /i "installer.msi" /n {PRODUCTCODE} REINSTALL=ALL REINSTALLMODE=vamus
问题是如果产品代码是为重大升级自动生成的,那么我不知道它是什么,所以我无法传递给命令参数。
有没有办法使用实例的 UpgradeCode 或 InstanceID 或 ProductCode 来启动升级?因为这两个都将保持静态。或者,我是否可以不带参数启动 msi,在 UI 对话框中选择现有实例(通过检查注册表),然后设置适当的属性以强制 msi 进入该实例的升级模式?
【问题讨论】:
-
在我看来,一旦安装了每个实例,它就是一个带有产品代码的产品。如果您正在进行升级,那么您的新产品只需要进行一次无聊的重大升级,并在其升级表中填充将替换它应该替换的任何先前产品的东西。并不是说我对实例了解很多,而是您是否尝试过使用升级表的传统方法,这种方法会导致您的新实例升级每个旧实例。您是说您不能单独升级每个产品,因为它们都共享相同的升级代码?同一个版本?
-
只是为了让您知道您可以获得产品代码、升级代码和的完整列表 >产品名称通过 PowerShell 在给定的机器上:How can I find the Upgrade Code for an installed MSI file?.
标签: wix installation windows-installer multiple-instances