因此,我有一个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进入该实例的升级模式?
您可能会发现这有帮助:http://sklyarenko.net/blog/2011/09/14/revisited-multiple-instance/ –
在我看来,一旦每个实例安装,它是一个产品的产品代码。如果你正在进行升级,那么你的新产品只需要进行一次无聊的重大升级,然后用升级表填充升级表,以替换以前应该替换的任何产品。并不是说我对实例有很多了解,但是您是否尝试了使用升级表的传统方法,这些升级表会导致您的新实例升级您的每个旧实例。你是否说你不能单独升级每个产品,因为它们都具有相同的升级代码?同一版本? – PhilDW
只是为了让您知道,您可以通过PowerShell在给定机器上获得**产品代码**,**升级代码**和**产品名称**的完整列表** ** [**我找到安装的MSI文件的升级代码?**](https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095)。 –