如何仅在安装中执行自定义操作(而不是卸载)
我相信这很容易,但是我很难过。 我有一个自定义操作,在安装时执行一个不同的(非MSI)安装程序。 不幸的是,我注意到它也执行UNinstallation上的安装程序!
我已经看了选项,但我不能“找出如何制止这一点。 如果有人能帮助我,我会非常感激。
另外,如何设置自定义操作才能在UNinstall期间closures? 任何帮助是非常感激的家伙!
添加一个条件的行动,所以它只在安装过程中触发,而不是卸载。
操作仅在安装期间运行
NOT Installed AND NOT PATCH
操作在安装和修复期间运行
NOT REMOVE
仅在初始安装时运行:
NOT Installed
在初始安装或select修复时运行。
NOT Installed OR MaintenanceMode="Modify"
要仅在卸载期间运行操作,请使用以下条件:
REMOVE~="ALL"
仅在升级期间运行操作:
Installed AND NOT REMOVE
有点纠正:
最后,要在卸载期间只运行一个操作,请使用以下条件: REMOVE="ALL"
这看起来更合适,因为属性REMOVE
包含要卸载的function。
因此,如果我执行修改以删除一个function,则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>
它混淆了我,因为自定义是跟着行动attribue
请注意REMOVE=ALL
。 它在installvalidate序列之前是不可用的。
并检查下面的链接了解更多详情:
http://msdn.microsoft.com/en-us/library/aa371194(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/aa368013(v=vs.85).aspx
自定义操作中的一个条件,可能是使用匹配的自定义操作来执行卸载。 不知道你正在使用什么工具,但假设二次安装绑定到一个组件,我会使用该组件状态。 状态= 3意味着安装的目标状态。 状态= 2意味着缺席的目标状态。 请注意,如果没有变化,状态将不会被设置。