对于自定义操作的重大升级,未升级PRODUCTCODE评估为true

时间:2020-02-25 14:00:03

标签: wix windows-installer

我正在使用仅在首次安装期间需要调用exe的方式创建安装程序。 在进行任何升级时,不应调用自定义操作。

<CustomAction Id="MyExe"
              Directory="INSTALLFOLDER"
              ExeCommand="&quot;[INSTALLFOLDER]MyExe.exe&quot; /arg"
              Execute="deferred"
              Return="ignore"
              Impersonate="no"
             />    

并将序列/条件设置为:

<InstallExecuteSequence>
  <DeleteServices>NOT UPGRADINGPRODUCTCODE</DeleteServices>
  <Custom Action='MyExe' After='InstallFiles' >(NOT Installed) AND (NOT UPGRADINGPRODUCTCODE)</Custom>      
</InstallExecuteSequence>

我发现的行为是:

  • 首次安装-运行操作
  • 升级时-操作运行<-我不希望它在此处运行
  • 卸载时-操作未运行

在MSI安装日志中,我可以看到已设置升级产品代码。我不确定如何从日志中确定它是否已安装。 我尝试将“ NOT UPGRADINGPRODUCTCODE”更改为“ UPGRADINGPRODUCTCODE”,然后CA没有在升级时运行。但是它当时也没有在初始安装上运行。

我将条件设置为在初始安装时运行错误吗?

使用Wix 3.11。

1 个答案:

答案 0 :(得分:1)

主要升级和条件 Please read this answer。您需要解决的主要事实是: 1) 一系列的旧产品卸载和 2) 安装过程一种新的安装方式-在发生顺序方面有所不同。因此,一种安装方式是卸载,另一种安装方式是安装。 You can use a debugging approach described here to check conditions

本质上:

  • UPGRADINGPRODUCTCODE 仅在主要升级过程中要卸载的设置中进行设置。未在正在安装的新版本中设置它。因此,条件 UPGRADINGPRODUCTCODE 在安装设置中不成立,仅在卸载设置中不成立。
  • WIX_UPGRADE_DETECTED 仅在使用WiX的MajorUpgrade元素的设置中设置,该设置检测到在安装过程中已卸载了另一个版本。 因此,条件 WIX_UPGRADE_DETECTED 在安装设置中适用,但在卸载设置中不适用。

应用程序启动 :通常,您作为安装程序一部分运行的程序可以在首次启动应用程序时运行。在调试和测试方面非常容易(熟悉的上下文,没有模拟,没有排序,没有条件,与主应用程序相同的源代码以及易于调试的步骤)。简而言之:更可靠,更易于管理。对于质量检查小组的好处以及可以使用它来测试“整洁的情况”和/或升级方案的人。