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。
我有两个自定义操作(立即和延迟)。我想在升级期间跳过操作。
我试过:
<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。