我相信这应该很容易,但我遇到了一些麻烦。我有一个自定义操作,它在安装时执行一个不同的(非msi)安装程序。不幸的是,我发现它也会在卸载时执行该安装程序!
我查看了选项,但似乎找不到停止这种情况的方法。如果有人能帮助我,我将不胜感激。
另外,如何设置自定义操作仅在卸载时触发?非常感谢大家的帮助!
我相信这应该很容易,但我遇到了一些麻烦。我有一个自定义操作,它在安装时执行一个不同的(非msi)安装程序。不幸的是,我发现它也会在卸载时执行该安装程序!
我查看了选项,但似乎找不到停止这种情况的方法。如果有人能帮助我,我将不胜感激。
另外,如何设置自定义操作仅在卸载时触发?非常感谢大家的帮助!
在操作上添加一个条件,使其只在安装期间触发,而不是卸载期间触发。
仅在安装期间运行操作
NOT Installed AND NOT PATCH
动作在安装和修复期间运行
NOT REMOVE
仅在初始安装时运行:
NOT Installed
安装时或选择修复时运行。
NOT Installed OR MaintenanceMode="Modify"
只在卸载时运行操作,请使用以下条件:
REMOVE~="ALL"
仅在升级期间运行操作:
Installed AND NOT REMOVE
稍作更正:
最后,要仅在卸载期间运行操作,请使用以下条件:REMOVE="ALL"
这似乎更为合适,因为属性REMOVE
包含正在被卸载的功能。
因此,如果我执行修改以删除一个功能,则REMOVE
为true,并且仅在卸载时执行的操作会在修改时执行。
在MSDN上了解更多详情
一个例子:
<InstallExecuteSequence>
..
<Custom Action="QtExecIdOfCA" Before="InstallFinalize">NOT Installed</Custom>
..
</InstallExecuteSequence>
..
..
<CustomAction Id="QtExecIdOfCA" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/>
注意! 条件被添加到 <Custom>
标签中,而不是 <CustomAction>
。这让我感到困惑,因为 Custom 后面跟着 Action 属性。
REMOVE=ALL
,它不可在安装验证之前使用。请参考以下链接以获取更多详细信息:在自定义操作上设置一个条件,可能需要匹配的自定义操作来执行卸载。不确定您使用的工具是什么,但假设次要安装与组件相关联,我会使用该组件状态。状态=3表示目标状态已安装。状态=2表示目标状态不存在。请注意,如果没有更改,则不会设置状态。