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

时间:2015-05-25 13:36:56

标签: wix windows-installer installer custom-action

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

我试过了:

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

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

2 个答案:

答案 0 :(得分: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

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

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

答案 1 :(得分:0)

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

参考样式表”: