【问题标题】:WiX - Doing a major upgrade on a multi instance installWiX - 对多实例安装进行重大升级
【发布时间】: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


【解决方案1】:

这是我迄今为止为处理 3 个单独的实例升级所做的工作:

<InstanceTransforms Property="Upgrade">
  <Instance Id="I01" ProductCode="*"  ProductName="Product Instance 1" UpgradeCode="55a25a09-5979-438d-91dd-67755012a288"/>
  <Instance Id="I02" ProductCode="*" ProductName="Product Instance 2" UpgradeCode="a27eb2e5-9aa8-4d09-b6c0-df717875c310"/>
  <Instance Id="I03" ProductCode="*" ProductName="Product Instance 3" UpgradeCode="d705720d-3703-4b17-817e-bd51edd9abea"/>
</InstanceTransforms>

虽然我的属性升级是固定的 Guid。有了这个,我可以使用这一行分别处理 3 个实例及其更新 - 对于新安装,添加 MSINEINSTANCE=1- :

msiexec /i MyProduct.msi MSINEWINSTANCE=1 Transforms=":I01"

【讨论】:

  • 这或多或少正是我最终所做的。我不能肯定它在问题被打开时是否会起作用,但从那时起,wix 多实例支持已经走过了漫长的道路,现在它确实可以工作了。
【解决方案2】:

非常确定您需要产品代码,因为升级代码标识的是一个产品系列,而不是单个产品。

启动 PowerShell 并运行此命令以获取已安装产品的列表以及产品代码

Get-WmiObject -Class win32_product

这是获取表格格式输出的另一种方法(IdentifyingNumber 是 ProductCode):

Get-WmiObject Win32_Product | Format-Table IdentifyingNumber, Name, Version

您也可以在使用 Orca (MSI SDK tool) 编译的 MSI 的属性表中找到产品代码:

【讨论】:

  • Orca 工具帮我搞定了!
猜你喜欢
  • 1970-01-01
  • 2010-10-04
  • 2010-09-11
  • 2014-02-10
  • 2015-08-09
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
相关资源
最近更新 更多