73

我敢肯定这很容易,但我很难做到这一点。我有一个自定义操作,可以在安装时执行不同的(非 msi)安装程序。不幸的是,我注意到它还在卸载时执行安装程序!

我已经浏览了这些选项,但我似乎无法找到阻止这种情况的方法。如果有人可以帮助我,我将非常感激。

另外,如何设置自定义操作以仅在卸载期间关闭?非常感谢任何帮助!

4

5 回答 5

169

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

仅在安装期间运行的操作

NOT Installed AND NOT PATCH

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

NOT REMOVE

仅在初始安装时运行:

NOT Installed

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

NOT Installed OR MaintenanceMode="Modify"

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

REMOVE~="ALL"

仅在升级期间运行操作:

Installed AND NOT REMOVE
于 2009-02-11T21:25:14.170 回答
7

一点修正:

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

这似乎更合适,因为该属性REMOVE包含要卸载的功能。
因此,如果我进行修改以删除一项功能,REMOVE则为 true,并且仅在卸载时执行的操作在修改时执行。
MSDN 上的更多详细信息

于 2011-04-06T19:29:29.130 回答
7

一个例子:

<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>我感到困惑,因为自定义后面是动作属性

于 2014-02-24T11:45:04.377 回答
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

于 2014-01-02T16:32:48.047 回答
1

自定义操作的条件,可能带有匹配的自定义操作来执行卸载。不确定您使用的是什么工具,但假设二次安装与组件相关联,我将使用该组件状态。= 3 的状态表示已安装的目标状态。状态 = 2 表示目标状态不存在。请注意,如果没有更改,则不会设置状态。

于 2009-02-11T21:41:57.017 回答