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

时间:2009-02-11 16:25:23

标签: installer windows-installer installshield

我确信这很容易,但我有点困难。我有一个自定义操作,在安装时执行不同的(非msi)安装程序。不幸的是,我注意到它也在UNinstallation上执行安装程序!

我已经查看了选项,但我似乎无法找到如何阻止这一点。如果有人能帮助我,我将非常感激。

另外,如何设置自定义操作仅在UNinstall期间关闭?任何帮助都非常感谢大家!

5 个答案:

答案 0 :(得分:163)

在操作上添加条件,使其仅在安装期间触发,而不是在卸载期间触发。

仅在安装

期间运行操作
NOT Installed AND NOT PATCH

在安装和修复期间运行操作

NOT REMOVE

仅在初始安装时运行:

NOT Installed

在初始安装时运行或选择修复时运行。

NOT Installed OR MaintenanceMode="Modify"

要仅在卸载期间运行操作,请使用以下条件:

REMOVE~="ALL"

仅在升级期间运行操作:

Installed AND NOT REMOVE

答案 1 :(得分:7)

稍微纠正一下:

最后,要仅在卸载期间运行操作,请使用以下条件: REMOVE="ALL"

这似乎更合适,因为属性REMOVE包含要卸载的功能  因此,如果我执行修改以删除一个功能,则REMOVE为真,并且仅在修改时执行的操作将在修改时执行。
More details here on MSDN

答案 2 :(得分:6)

一个例子:

<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>它让我感到困惑,因为自定义后面跟着Action attribue < / p>

答案 3 :(得分:5)

请注意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

答案 4 :(得分:1)

自定义操作的条件,可能具有匹配的自定义操作以执行卸载。不确定您正在使用哪些工具,但假设辅助安装与组件绑定,我将使用该组件状态。状态= 3表示已安装的目标状态。状态= 2表示缺席的目标状态。请注意,如果没有变化,则不会设置状态。