【问题标题】:Wix major upgradeWix 重大升级
【发布时间】:2010-10-04 01:39:30
【问题描述】:

如何使用 WIX 防止在“重大升级”期间覆盖配置文件?

我希望在初始安装时安装该文件,在卸载时删除该文件,并在“重大升级”时保持不变。

谢谢

【问题讨论】:

    标签: installation wix windows-installer


    【解决方案1】:

    最直接的方法是将 RemoveExistingProducts 安排在 InstallExecute 或 InstallFinalize 之后。这样配置文件不会被删除然后再次安装(就像您在 InstallInitialize 之前安排的那样)。当然,这么晚安排 RemoveExistingProduct 意味着您需要非常小心您的组件规则。

    我个人最喜欢的是将配置视为“用户数据”,而根本不安装它。您随应用程序提供默认设置,但任何更改都由用户在其私人用户配置文件中进行。让您摆脱在设置过程中无法很好解决的各种令人讨厌的迁移问题。

    【讨论】:

    • +1 用于用户配置文件,我们也在路径中使用主要版本(例如 %AppData%\Manufacturer\Product\1.0\...),以便我们可以更改配置格式一个主要版本,让用户选择升级/迁移他们的配置。
    • Rob 你能解释一下你所说的小心你的组件规则是什么意思吗?
    • @KevM 我想现在你已经有了答案,但是为了回答这个问题,我在查看 WiX 3.5 的@987654322 的调度选项时遇到了对this blog post 的引用@元素。
    【解决方案2】:

    您可以使用 UPGRADINGPRODUCTCODE 属性来检查您是否正在升级。我们使用它来确定是否应该运行“清理”自定义操作:

    <Custom Action="" After="CleanUpFiles">
      <![CDATA[REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE]]>
    </Custom>
    

    我同意 Rob 的观点,因为配置是用户数据,存储在他们的 AppData 文件夹中,并且从未由 MSI 创建。相反,它设置了一个默认值(我们将其作为默认配置存储在程序文件中),并由应用程序本身复制。但是,如果用户想卸载我们的产品,我们不想让这些东西弄乱用户的机器,所以我们制作了一个 CleanUpFiles 来搜索 HD 以查找任何遗留的垃圾。

    【讨论】:

    • 我正在使用此方法删除应在重大升级期间保留的许可证数据和其他注册表信息。然而,对于磁盘上的配置文件,这些配置文件存储在用户配置文件中,因此如果用户卸载/重新安装,它们仍会保留。
    • @csexton 不 UPGRADINGPRODUCTCODE 属性仅适用于您不想在“卸载”上运行的自定义操作,但在“安装”上的自定义操作仍会在主要升级期间运行?
    【解决方案3】:

    你想要覆盖它吗?如果不是这种情况,我将配置文件分配给它们自己的组件并将它们标记为 Never Overwrite。这样升级不会覆盖文件,但卸载会删除它。

    例如

    <Component Id="myComp" Guid="myguid" NeverOverwrite="yes">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-16
      • 2023-03-22
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多