【发布时间】:2026-01-09 05:00:02
【问题描述】:
我正在使用 wix 安装程序来覆盖(阅读:修改现有注册表值)、添加新值等。卸载后我需要将它们恢复到原始状态(我修改的那些)。由于 Wix 不支持此功能,因此我必须使用自定义操作(如我所读),我想运行一个 exe,它将使用 reg import 运行一个 .reg 文件。根据这个站点:http://www.installsite.org/pages/en/isnews/200108/index.htm 我的自定义操作必须运行After="InstallFinalize",因为 wix 回滚会删除我的注册表导入(作为回滚的一部分)。
所以基本上它看起来像这样:安装程序修改 reg 值,卸载程序删除所有触及的注册表更改(回滚的一部分),我的 exe 将恢复它们。
所以我按照他的方法做了,以提升权限等方式启动我的 exe。 http://wixtoolset.org/documentation/manual/v3/customactions/qtexec.html
<Component Id="registry" Guid="*">
<File Id="regexe" Source="RegistryRollback.exe"/>
<File Id="regfile" Source="Reg_rollback.reg" />
</Component>
<Property Id="LaunchRegExe" Value="[#regexe]" />
<CustomAction Id="LaunchRegExe" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/>
<Custom Action='LaunchRegExe' After='InstallFinalize'>Installed AND NOT UPGRADINGPRODUCTCODE</Custom>
但我收到了Error 19 ICE77: LaunchRegExe is a in-script custom action. It must be sequenced in between the InstallInitialize action and the InstallFinalize action in the InstallExecuteSequence table C:\Merlin\Main\Demo\KioskDemoSetup\nw_setup\nw.wxs 250 1 nw_setup
感谢您的帮助!
【问题讨论】:
-
这里看不到全貌...您在哪里修改注册表值?您在哪里担心回滚操作会还原您的更改?从我们在这里看到的情况来看,除了延迟操作必须在
InstallInitialize和InstallFinalize之间运行之外,您的操作只会在卸载时运行,当您取消它时,它的行为会有所不同。意味着您的 exe 将仅在卸载时运行,在延迟上下文中,在(卸载)安装完成之前的某个时间。
标签: wix wix-extension wix3.8