【问题标题】:WIX upgrade scenarioWIX 升级场景
【发布时间】:2017-07-27 02:24:52
【问题描述】:

我有一个正在尝试找出的现有 WIX 安装程序文件。在这个文件中,我看到定义了两个自定义操作:

<Custom Action="CreateBackup"     Before="InstallInitialize">            
    <![CDATA[Installed]]>
</Custom>

<Custom Action="RestoreBackup"    After= "InstallFinalize">
    <![CDATA[NOT Installed]]>
</Custom>

CreateBackup 功能从远程位置复制一些文件(与此安装程序没有直接关系)。恢复会将这些文件放回同一位置。

现在在升级方案中,我看到以下日志记录顺序。我已将“已安装”的表观价值放在括号中:

  • CreateBackup 被跳过(已安装 == false)
  • InstallInit
  • CreateBackup 成功(已安装 == true)
  • InstallInit
  • 安装完成
  • RestoreBackup 被跳过(已安装 == true)
  • 安装完成
  • RestoreBackup 成功(已安装 == false)

我对此有几个问题:

  • 我了解此脚本中有卸载和安装。根据“已安装”的值,我得出结论,安装首先完成。这是正确的吗?
  • 我看到 InstallInit 在第一次 InstallFinalize 之前被调用了两次。这是什么意思?卸载开始时安装是否仍然忙?
  • Installed的第一个值是false,所以我猜是相对于新版本的吧?但是卸载完成后怎么又变假了呢?那是相对于旧版本的吗?

我正在使用 MajorUpgrade 元素。

希望有人能解决这个问题。

【问题讨论】:

    标签: wix installation


    【解决方案1】:

    我假设您正在使用 WiX MajorUpgrade 元素进行升级,因此您需要的条件应该是这样的:

    当您进行升级时,WIX_UPGRADE_DETECTED 属性会在升级完成时设置:

    http://wixtoolset.org/documentation/manual/v3/xsd/wix/majorupgrade.html

    因此,当您要创建备份时,请使用该条件,假设您要在升级时备份现有文件(来自旧产品)。

    从您的帖子中不清楚您何时要进行恢复,但如果是在升级之后,请使用相同的 WIX_UPGRADE_DETECTED 属性。

    那些基于 Installed 属性的条件似乎没有多大意义,因为如果安装了当前 MSI 的 ProductCode,则会设置该属性。在该阶段的升级中,它将始终未设置。

    这篇文章有更多关于属性和安装操作的信息:

    How to add a WiX custom action that happens only on uninstall (via MSI)?

    【讨论】:

    • 确实是大升级的元素。我不知道这是相关的:)。我实际上并不是在尝试修复某些问题,而是在尝试了解当前实现的流程。升级期间“已安装”属性如何变化?备份和恢复所做的是将远程位置(与此安装程序不直接相关)的一些文件保存在磁盘上。恢复将这些文件放回原处。我已经更新了我的问题,使其更清晰。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2010-10-04
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多