2009-02-11 51 views
68

我确信这很容易,但我很难过。我有一个自定义操作,在安装时执行一个不同的(非MSI)安装程序。不幸的是,我注意到它也在UNinstallation上执行安装程序!如何仅在安装时执行自定义操作(而不是卸载)

我已经看过这些选项,但我不能'找出如何阻止这一点。如果有人能帮助我,我会非常感激。

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

+4

对于一个参考:[**通用MSI条件小抄**](HTTP://博客。 flexerasoftware.com/installtalk/2013/04/installer-cheat-sheet-series.html)。 – 2015-04-20 20:42:31

回答

154

在操作上添加一个条件,以便它仅在安装过程中触发,而不是在卸载过程中触发。

行动只运行在安装

NOT Installed AND NOT PATCH 

操作过程中运行安装和维修上只有初始安装

NOT REMOVE 

运行:初始

NOT Installed 

运行安装或修复时是选择。

NOT Installed OR MaintenanceMode="Modify" 

运行仅在卸载过程中的操作使用下列条件:

REMOVE~="ALL" 

要只升级过程中执行的操作:

Installed AND NOT REMOVE 
+0

和重新安装模式? – 2012-06-07 07:15:39

+1

@Rasa重装模式是什么意思? MSI没有这样的说法,你可能正在寻找“修复”(不去除)。如果您记录MSI输出,您可以准确查看在上述条件下使用的各种值将被设置为什么,并确定哪一个值符合您的情况。 – saschabeaumont 2012-06-08 22:19:42

0

的自定义操作的条件,可能与一个匹配的自定义操作来执行卸载。不知道你正在使用什么工具,但假设二次安装与组件绑定,我会使用该组件状态。状态= 3意味着已安装的目标状态。状态= 2意味着不存在的目标状态。请注意,如果没有变化,状态将不会被设置。

7

修正的位:

最后,在卸载过程中使用下列条件只运行一个动作: REMOVE="ALL"

这似乎更适合作为财产REMOVE包含正在卸载的功能。
因此,如果我进行修改以删除某个功能,则REMOVE为true,并且仅在卸载时执行的操作在修改时执行。
More details here on MSDN

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>它搞糊涂了,因为自后跟行动attribue

相关问题