我正在使用 Wix 编写我自己的 MSI 安装程序。我只需要在卸载产品之前运行自定义操作,但是before所有注册表值或文件都将被删除。我做了以下操作(只是为了尝试):
<Property Id='CALC'>Calc.exe</Property>
<CustomAction Id='BeforeUninstall01' Property='CALC' ExeCommand='' Return='check' />
<InstallExecuteSequence>
<Custom Action='BeforeUninstall01' After='InstallInitialize'>Installed</Custom>
</InstallExecuteSequence>
如果我选择的话它会起作用uninstall
从控制面板,但如果我运行我的 MSI(当它已经安装时)BeforeUninstall01
无论如何,自定义操作都会被触发,但它不应该被触发。
知道如何改变这种情况吗?
您选择条件“已安装”。
给定您的代码,使用内置属性“REMOVE”的所需条件将导致:
<InstallExecuteSequence>
<Custom Action='BeforeUninstall01' After='InstallInitialize'>REMOVE="ALL"</Custom>
</InstallExecuteSequence>
这还允许您(即使没有必要)卸载单个功能,但在不触发自定义操作 (ca) 的情况下不能卸载整个产品。
换句话说,ca 总是且仅在以下情况下被触发:
你的情况开始了always,但不适用于首次安装(包括修复、更新、卸载、修改、修补等。这确实不是您所需要的。
Reubz的情况略有不同,这会开始always但不适用于首次安装,也不适用于主要升级期间,这并不是真正的改进。
关于排序:
如果您的 ca 确实需要提升权限,那么您必须使用系统权限运行“延迟”自定义操作,并将给定的 ca 定义更改为(如果不需要,则允许):
<CustomAction Id='BeforeUninstall01' Property='CALC' ExeCommand='' Execute="deferred" Impersonate="no" Return="check" />
(我不是 WiX 向导,只是我很了解 MSI,所以我没有检查你的 WiX 代码的任何部分,只检查问题。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)