2014-04-04 20 views
5

因此,我有一个windows服务,可以在一台服务器上安装多个实例。安装程序需要能够升级单个实例。安装程序使用实例转换,但我不确定如何根据需要进行主要升级。WiX - 对多实例安装进行重大升级

对于重大升级的工作,我的理解是,我应该有产品代码的变化,所以实例以这种形式定义:

<Instance ProductCode="*" 
      UpgradeCode="{SOMEGUID}" 
      ProductName="Instance 1" 
      Id="Instance1"/> 

微星可以启动通过安装一个新的实例:

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进入该实例的升级模式?

+0

您可能会发现这有帮助:http://sklyarenko.net/blog/2011/09/14/revisited-multiple-instance/ –

+0

在我看来,一旦每个实例安装,它是一个产品的产品代码。如果你正在进行升级,那么你的新产品只需要进行一次无聊的重大升级,然后用升级表填充升级表,以替换以前应该替换的任何产品。并不是说我对实例有很多了解,但是您是否尝试了使用升级表的传统方法,这些升级表会导致您的新实例升级您的每个旧实例。你是否说你不能单独升级每个产品,因为它们都具有相同的升级代码?同一版本? – PhilDW

+0

只是为了让您知道,您可以通过PowerShell在给定机器上获得**产品代码**,**升级代码**和**产品名称**的完整列表** ** [**我找到安装的MSI文件的升级代码?**](https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095)。 –

回答

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变换= “:I01”

+0

这或多或少正是我最终做的。我不能肯定地说这个问题在问题解决的时候能否奏效,但自那时以来,wix多实例支持已经走过了一段很长的路,现在确实可行。 – AndyK

8

敢肯定你需要为这个产品代码因为升级代码标识系列产品,而不是单一的一个。

火起来PowerShell的并运行此命令来获得安装的产品与产品代码列表:

Get-WmiObject -Class win32_product 

这是一个不同的方式来获得以表格格式的输出(IdentifyingNumber是ProductCode):

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

您还可以在编译的M的Property表中找到产品代码SI采用逆戟鲸(MSI SDK tool):

enter image description here

+0

另请参阅:http://stackoverflow.com/a/24340339/129130 –

+0

Orca工具为我做到了! – Antebios