我敢肯定这很容易,但是我在这方面遇到了一些困难。我有一个自定义操作,该操作在安装时执行不同的(非msi)安装程序。不幸的是,我注意到它还在UNinstallation上执行安装程序!
我已经仔细研究了这些选项,但似乎无法找出阻止方法。如果有人能帮助我,我将非常感激。
另外,如何将自定义操作设置为仅在卸载期间才能执行?任何帮助都非常感谢你们!
Answers:
在操作上添加一个条件,以便仅在安装过程中触发该条件,而不是在卸载过程中触发该条件。
操作仅在安装期间运行
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>
我感到困惑,因为“自定义”后跟“操作”属性
请注意REMOVE=ALL
。在installvalidate序列之前不可用。
并检查以下链接以获取更多详细信息:
http : //msdn.microsoft.com/zh-cn/library/aa371194( v = vs.85)
.aspx http://msdn.microsoft.com/zh-cn/library/ aa368013(v = vs.85).aspx
自定义操作的条件,可能带有匹配的自定义操作以执行卸载。不知道您使用的是什么工具,但是假设辅助安装与组件相关联,我将使用该组件状态。状态= 3表示目标安装状态。状态= 2表示目标状态不存在。请注意,如果没有更改,则不会设置状态。