gpt4 book ai didi

wix - 使用 Wix 卸载 MSI 之前的自定义操作

转载 作者:行者123 更新时间:2023-12-04 21:37:01 24 4
gpt4 key购买 nike

我正在使用 Wix 编写我自己的 MSI 安装程序。我只需要在卸载产品之前运行自定义操作,但是 之前 任何注册表值或文件都将被删除。我做了以下(只是为了尝试):

<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 总是且仅在以下情况下触发

你的条件总是启动 ca,但不是第一次安装(包括修复、更新、卸载、修改、补丁等。这确实不是你需要的。

Reubz 的情况略有不同,这将始终启动,但不会在首次安装时启动,也不会在主要升级期间启动,这在这里不是真正的改进。

关于排序:
如果您的 ca 确实需要提升权限,那么您必须使用系统权限运行“延迟”自定义操作,并将给定的 ca 定义更改为(如果没有,请让它):
<CustomAction Id='BeforeUninstall01' Property='CALC' ExeCommand='' Execute="deferred" Impersonate="no" Return="check" />

(我不是 WiX 向导,只有我非常了解 MSI,所以我没有检查您的 WiX 代码的任何部分,只检查了问题。)

关于wix - 使用 Wix 卸载 MSI 之前的自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17587357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com