我非常喜欢持续集成、部署和交付。我相信基于修订版的升级是可行的,但使用基于WIX的安装程序似乎真的很难支持这一功能。我目前正在尝试更改我们产品的安装程序,以便它可以并排安装(多实例支持),并允许基于修订版的升级。在我的情况下,我希望允许同时安装1.0.0.0和1.0.0.1版本的产品,并支持升级任何安装,就像允许在不更改1.0.0.0版本的产品的情况下从1.0.0.1升级到1.0.0.2一样。
因此,在给定的场景中,
- 在1.0.0.0之上安装1.0.0.1时,需要升级1.0.0.0
- 当安装1.0.0.1作为新实例时,1.0.0.0和1.0.0.1需要共存于同一个盒子上(安装将使用不同的位置)。它应该像新的一样安装,并在Add/Remove程序中显示两次
- 在未来的1.0.0.2应该能够在不更改其他实例的情况下升级任何一个现有实例(1.0.0.0或1.0.0.1)
- 在1.0.0.1上安装1.0.0.1应执行常规修复
- 安装程序应防止降级
我尝试了Wix MajorUpgrade元素,但它并没有按照我想要的方式工作。这是我实验的全部结果。
1.安装1.0.0.0,然后升级到1.0.0.1。它运行良好(如预期)
2.安装1.0.0.1作为新实例,然后1.0.0.0和1.0.0.1共存于同一个盒子上(Works)
3.安装1.0.0.2升级到1.0.0.0(不是1.0.0.1)。这是一个问题。它卸载了所有内容(1.0.0.0和1.0.0.1),并且没有正确安装1.0.0.2
最后的结果真的很奇怪,我不知道如何在安装只升级目标版本而不卸载所有实例的情况下实现这一点?任何帮助或指导都将不胜感激。
<Product Id="*"
Name="$(var.ProductName)"
Language="1033"
Version="$(var.Version)"
Manufacturer="$(var.Manufacturer)"
UpgradeCode="MY-UPGRADE-CODE">
<MajorUpgrade Schedule="afterInstallInitialize" DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." />
您需要停止使用MajorUpgrade元素并构建特定于版本的升级。MajorUpgrade基本上是一种让每个先前版本升级的简单方法。相反,您需要构建针对您想要升级的特定版本范围的特定WiX升级元素。您的1.0.0.2将有一个Upgrade元素,该元素仅针对1.0.0.0版本进行升级。
如果没有更多关于未正确安装的详细信息,就无法对失败的升级做太多说明。我注意到,您的升级计划在InstallInitialize之后进行,这意味着如果您将相同的资源安装到相同的位置,则需要增加文件版本以替换文件并遵循组件规则。也许这就是问题所在。