WiX - 更新期间不执行自定义操作

WiX - not executing custom action during update

我有两个自定义操作(立即和延迟)。我想在升级期间跳过操作。

我试过:

 <Product Id="*" Name="$(var.ProductName)" Language="1033" Version="$(var.Version)" 
          Manufacturer="$(var.Manufacturer)" UpgradeCode="{GUID}">

    <MajorUpgrade DowngradeErrorMessage="Newer version is already installed." />

<Custom Action='CAa' After='InstallInitialize'>NOT Installed AND NOT PATCH</Custom>

和:

<Custom Action='CAa' After='InstallInitialize'>NOT Installed AND NOT UPGRADINGPRODUCTCODE</Custom>

目前,操作在更新期间启动。

这些条件很复杂 - InstallExecuteSequence 有很多选项和模式(第一次安装,主要升级安装、次要升级安装、维护安装、卸载、主要升级卸载顺序、打补丁、自动修复等...)。正如我在上面的评论中所写,您可以尝试 this PDF from Flexera.

没有保证,但这是一个建议。您可以通过显示来自您的 CA 的消息框来尝试这是否是您想要的(我无法使用这个糟糕的瘦客户端 测试它,所以它有点冒险尝试回答而不做我自己的测试 - 请仔细检查自己):

Not Installed AND NOT PATCH AND NOT UPGRADINGPRODUCTCODE AND NOT REMOVE=~"ALL").

  • (未安装)= 运行 首次安装
  • (NOT PATCH) = 修补期间不要 运行
  • (NOT UPGRADINGPRODUCTCODE) = 不要 运行 在主要升级期间卸载
  • (NOT REMOVE=~"ALL") = 不要 运行 卸载

"参考样式table":

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

当您使用 WiX MajorUpgrade 进行重大升级时,WIX_UPGRADE_DETECTED 已设置 - 请参阅:

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

这就是您在升级安装中用来检测是否安装了旧产品的方法。换句话说,这意味着新的传入安装检测到正在升级的旧版本。

UPGRADINGPRODUCTCODE 不适合使用。这个 属性 是在旧产品升级和卸载中设置的,所以它知道卸载和升级之间的区别,正如这里的文档所说:

https://msdn.microsoft.com/en-us/library/aa372380(v=vs.85).aspx

"An application determines whether it is being removed by an upgrade or the Add or Remove Programs by checking UPGRADINGPRODUCTCODE."

它的值是导致它被删除的传入升级的 ProductCode。