加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

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

发布时间:2021-01-27 11:08:12 所属栏目:电商 来源:网络整理
导读:我正在使用Wix来编写我自己的MSI安装程序.我需要在卸载产品之前,但在删除任何注册表值或文件之前运行自定义操作.我做了以下(只是为了尝试): Property Id='CALC'Calc.exe/PropertyCustomAction Id='BeforeUninstall01' Property='CALC' ExeCommand='' Return

我正在使用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>

如果我选择从控制面板卸载它,但如果我运行我的MSI(虽然它已经安装),它仍然有效,无论如何都会触发BeforeUninstall01自定义操作,它不应该.

知道如何改变这种状况吗?

解决方法

您选择条件“已安装”.

根据您的代码,使用内置属性“REMOVE”的所需条件将导致:

<InstallExecuteSequence>
   <Custom Action='BeforeUninstall01' After='InstallInitialize'>REMOVE="ALL"</Custom>
</InstallExecuteSequence>

这也允许您(即使没有必要)卸载单个功能,但不允许您在没有自定义操作(ca)的情况下卸载整个产品.
换句话说,ca始终只触发,如果

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

Reubz的状况略有不同,这将始终开始,但不是首次安装而不是重大升级期间,这不是真正的改进.

关于排序:
如果您的ca确实需要提升权限,那么您必须使用系统权限运行自定义操作“deferred”并将您给定的ca定义更改为(如果不是,请允许):

<CustomAction Id='BeforeUninstall01' Property='CALC' ExeCommand='' Execute="deferred" Impersonate="no" Return="check" />

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

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读