【问题标题】:WiX - not executing custom action during updateWiX - 更新期间不执行自定义操作
【发布时间】:2015-05-25 13:36:56
【问题描述】:

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

我试过了:

 <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>

目前,操作在更新期间开始。

【问题讨论】:

  • 或许你可以试试this answer条件下的PDF表格。
  • 请检查this post。检查表格和底部的讨论。这些条件非常好。

标签: wix windows-installer installation custom-action


【解决方案1】:

当您使用 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

“应用程序通过检查 UPGRADINGPRODUCTCODE 来确定它是通过升级删除还是通过添加或删除程序删除。”

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

【讨论】:

    【解决方案2】:

    这些条件非常适合 - 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") = 卸载时不运行

    参考样式表”:

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2011-08-05
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多