【问题标题】:How can I deploy an upgrade of my product which contains a file with version lower than the already deployed file?如何部署包含版本低于已部署文件的文件的产品升级?
【发布时间】:2015-06-29 12:47:17
【问题描述】:

我有一个部署文件 MyFile.dll 的 msi 组件。我有一台测试机器,我的产品已经在其中部署了 MyFile.dll,其版本为 09.99.99.99。

现在我正在编写一个重大升级,它将部署一个新版本的 MyFile.dll,版本为 05.23.76.123。在测试机上执行后,MyFilee.dll被移除了……我需要更改或修复才能正确部署。

无论注入的版本号如何,如何强制部署 MyFile.dll?

PS:这仅发生在我们的测试机器上。我们交付给用户的产品包含版本号与发布历史一致的文件。

【问题讨论】:

    标签: deployment wix windows-installer versioning major-upgrade


    【解决方案1】:

    在 Windows Installer 中有几种方法可以做到这一点,但它们都有其复杂性。 IMO 我只是重建与旧 DLL 相同的源代码,但使用更新的更高版本并保持简单。

    【讨论】:

    • 我刚试过。看起来我们无法注入更高的文件版本。我刚刚和我的团队开了个会,我们得出的结论是,我们的测试使用真实版本号而不是虚拟值会更好......
    • 我们可以只更改每个相应文件的组件 guid 吗?我认为应该没问题,因为我们的每次升级都是重大升级。
    • 为具有相同密钥文件的组件更改 guid 将违反组件规则。主要升级可以根据 RemoveExistingProducts 的计划进行。一些可能的故障模式是没有安装 DLL,因为 MSI 看到安装了较新的版本并选择不安装较旧的 DLL,然后升级删除了旧的 DLL。需要了解文件成本计算和升级方案才能解决此问题。最简单的解决方案是让 MSI 满意并使用更新的版本#重建 DLL。
    • 如果它实际上只是一个 Dll,则使用 Visual Studio 打开二进制 Dll 文件(作为文件打开),然后在版本资源中更改文件版本。
    • 我从未说过要使用“虚拟”版本。这涉及构建/发布/cm 实践领域,很大程度上取决于您的环境。我知道在我的环境中,我只会恢复 TFS 中的变更集并启动新构建,进行重大升级并完成它。
    【解决方案2】:

    这是完全可能的。正如here 所说,您可以指定REINSTALLMODE 属性并将其设置为“amus”或“dmus”,具体取决于您是要始终覆盖文件还是只是覆盖不同版本的文件:

    <Wix ...>
      <Product ...>
        <Property Id="REINSTALLMODE" Value="amus" />
    

    请注意,您在编译安装程序时会收到此警告: warning LGHT1076: ICE40: REINSTALLMODE is defined in the Property table. This may cause difficulties.

    【讨论】:

      【解决方案3】:

      降级文件并不是很简单,而且存在问题。如前所述,您可以更改组件 GUID 并使其工作。但是,这实际上取决于您的 RemoveExistingProducts 的排序位置。如果它在删除旧产品并安装新产品的位置进行排序,那么它可能会起作用。

      没有真正的直接和记录的方式。所有可用的选项都只是技巧。

      这仅适用于您的测试环境吗? 如果是,那么您可以在属性表中使用 REINSTALLMODE="amus" 并实现您想要的。 但是,这仅用于您的测试,不建议向您的最终用户推荐。

      问候, 基兰·赫格德

      【讨论】:

      • 如果不更改每个部署的文件名,我们就无法更改组件 GUID。正如 Chris 所指出的,“为具有相同密钥文件的组件更改 guid 将违反组件规则。”...
      • 好吧,我同意它违反了 Windows 安装程序组件规则。但是,当“RemoveExistingProducts”在最后被排序时,这种违规行为将出现在图片中,即。安装较新的产品以及安装较旧的产品,然后卸载较旧的产品。如果升级是以卸载旧产品然后安装新产品的方式进行的,那么您没有违反此处的规则。因为,您没有将两个产品安装到具有不同组件 GUIDS 的同一位置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 2019-05-31
      相关资源
      最近更新 更多