如何仅在安装中执行自定义操作(而不是卸载)

我相信这很容易,但是我很难过。 我有一个自定义操作,在安装时执行一个不同的(非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意味着缺席的目标状态。 请注意,如果没有变化,状态将不会被设置。