首页 文章

WiX项目允许基于版本的升级和并行(多实例支持)安装

提问于
浏览
2

我是持续集成,部署和交付的忠实粉丝 . 我相信基于版本的升级是可以实现的,但似乎使用基于WIX的安装程序使得支持此功能变得非常困难 . 我目前正在尝试更改我们产品的安装程序,以便可以并排安装(多实例支持)并允许基于修订的升级 . 在我的情况下,我希望允许并排安装1.0.0.0和1.0.0.1版本的产品,并且还支持升级任何安装,例如只允许从1.0.0.1升级到1.0.0.2而不更改1.0.0.0版本的产品 .

所以在给定的场景中,

  • 在1.0.0.0之上安装1.0.0.1时,需要升级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.1上安装1.0.0.1应该执行常规修复 .

  • 安装程序应防止降级 .

我尝试了Wix MajorUpgrade元素,但它没有按照我想要的方式工作 . 这是我的实验的完整结果 .

1. Install 1.0.0.0 then upgrade to 1.0.0.1. It works well (as expected)

2. Install 1.0.0.1 as new instance then both 1.0.0.0 and 1.0.0.1 co-exist on same box (Works).

3. Install 1.0.0.2 as upgrade to 1.0.0.0 (not 1.0.0.1). Here is problem. It uninstalls everything (both 1.0.0.0 and 1.0.0.1) and didn't installed 1.0.0.2 properly.

最后的结果真的很奇怪,我不知道如何安装只升级目标版本而不卸载所有实例的工作?任何帮助或指导将非常感谢 .

<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." />

1 回答

  • 1

    您需要停止使用MajorUpgrade元素并构建特定于版本的升级 . MajorUpgrade基本上是一个简短而又甜蜜的方式来升级每个先前版本 . 相反,您需要构建针对要升级的特定版本范围的特定WiX Upgrade元素 . 您的1.0.0.2将具有仅针对升级版本1.0.0.0的升级元素 .

    如果没有更详细地说明你没有正确安装的意思,不能说失败的升级 . 我注意到您在InstallInitialize之后安排了升级,这意味着如果要将相同的资源安装到相同的位置,则需要增加文件版本以替换文件并遵循组件规则 . 也许这就是问题所在 .

相关问题