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

时间:2014-08-29 21:44:05

标签: wix windows-installer wix3.5

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

所以在给定的情况下,

  1. 在1.0.0.0之上安装1.0.0.1时,需要升级1.0.0.0。
  2. 当安装1.0.0.1作为新实例时,1.0.0.0和1.0.0.1都需要在同一个盒子上共存(安装将使用不同的位置)。它应该像新的一样安装并在“添加/删除程序”中显示两次。
  3. 将来1.0.0.2应该能够在不更改其他实例的情况下升级任何一个现有实例(1.0.0.0或1.0.0.1)。
  4. 在1.0.0.1上安装1.0.0.1应该执行常规修复。
  5. 安装程序应防止降级。
  6. 我尝试了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." />
    

1 个答案:

答案 0 :(得分:1)

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

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