我确信这很容易,但我很难过。我有一个自定义操作,在安装时执行一个不同的(非MSI)安装程序。不幸的是,我注意到它也在UNinstallation上执行安装程序!如何仅在安装时执行自定义操作(而不是卸载)
我已经看过这些选项,但我不能'找出如何阻止这一点。如果有人能帮助我,我会非常感激。
另外,如何设置自定义操作才能在UNinstall期间关闭?任何帮助是非常感谢家伙!
我确信这很容易,但我很难过。我有一个自定义操作,在安装时执行一个不同的(非MSI)安装程序。不幸的是,我注意到它也在UNinstallation上执行安装程序!如何仅在安装时执行自定义操作(而不是卸载)
我已经看过这些选项,但我不能'找出如何阻止这一点。如果有人能帮助我,我会非常感激。
另外,如何设置自定义操作才能在UNinstall期间关闭?任何帮助是非常感谢家伙!
在操作上添加一个条件,以便它仅在安装过程中触发,而不是在卸载过程中触发。
行动只运行在安装
NOT Installed AND NOT PATCH
操作过程中运行安装和维修上只有初始安装
NOT REMOVE
运行:初始
NOT Installed
运行安装或修复时是选择。
NOT Installed OR MaintenanceMode="Modify"
运行仅在卸载过程中的操作使用下列条件:
REMOVE~="ALL"
要只升级过程中执行的操作:
Installed AND NOT REMOVE
和重新安装模式? – 2012-06-07 07:15:39
@Rasa重装模式是什么意思? MSI没有这样的说法,你可能正在寻找“修复”(不去除)。如果您记录MSI输出,您可以准确查看在上述条件下使用的各种值将被设置为什么,并确定哪一个值符合您的情况。 – saschabeaumont 2012-06-08 22:19:42
的自定义操作的条件,可能与一个匹配的自定义操作来执行卸载。不知道你正在使用什么工具,但假设二次安装与组件绑定,我会使用该组件状态。状态= 3意味着已安装的目标状态。状态= 2意味着不存在的目标状态。请注意,如果没有变化,状态将不会被设置。
修正的位:
最后,在卸载过程中使用下列条件只运行一个动作: REMOVE="ALL"
这似乎更适合作为财产REMOVE
包含正在卸载的功能。
因此,如果我进行修改以删除某个功能,则REMOVE
为true,并且仅在卸载时执行的操作在修改时执行。
More details here on MSDN
请注意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
一个例子:
<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
对于一个参考:[**通用MSI条件小抄**](HTTP://博客。 flexerasoftware.com/installtalk/2013/04/installer-cheat-sheet-series.html)。 – 2015-04-20 20:42:31