WiX - 在多实例安装上进行重大升级

And*_*dyK 5 installer windows-installer wix multiple-instances

所以,我有一个Windows服务,可以在一台服务器上安装多个实例.安装程序需要能够升级单个实例.安装程序使用Instance Transforms,但我不确定如何按照我的意愿进行主要升级.

为了进行重大升级,我的理解是我应该更改产品代码,因此实例以这种形式定义:

<Instance ProductCode="*"
            UpgradeCode="{SOMEGUID}"
            ProductName="Instance 1"
            Id="Instance1"/>
Run Code Online (Sandbox Code Playgroud)

可以启动msi以通过以下方式安装新实例:

msiexec.exe /i "installer.msi" TRANSFORMS=:Instance1 MSINEWINSTANCE=1
Run Code Online (Sandbox Code Playgroud)

但是,经过多次搜索后,我发现在特定实例上运行升级的唯一方法是这种格式:

msiexec.exe /i "installer.msi" /n {PRODUCTCODE} REINSTALL=ALL REINSTALLMODE=vamus
Run Code Online (Sandbox Code Playgroud)

这个问题是如果产品代码是自动生成主要升级,那么我不知道它是什么,所以我不能传递给命令参数.

有没有办法使用Instance的UpgradeCode或InstanceID或ProductCode启动升级?因为这两者都会保持静止.或者,我可以在没有参数的情况下启动msi,在UI对话框中选择现有实例(通过检查注册表),并设置适当的属性以强制msi进入该实例的升级模式吗?

Ste*_*mul 8

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

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

Get-WmiObject -Class win32_product
Run Code Online (Sandbox Code Playgroud)

这是以表格格式获取输出的不同方法(IdentifyingNumber是ProductCode):

Get-WmiObject Win32_Product | Format-Table IdentifyingNumber, Name, Version
Run Code Online (Sandbox Code Playgroud)

您还可以使用Orca(MSI SDK工具)在已编译的MSI的Property表中找到产品代码:

在此输入图像描述


小智 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>
Run Code Online (Sandbox Code Playgroud)

而我的财产升级是固定的指导。这样,我可以使用此行分别处理 3 个实例及其更新 - 对于新安装,添加 MSINEINSTANCE=1- :

msiexec /i MyProduct.msi MSINEWINSTANCE=1 转换 =“:I01”