2014-10-30 388 views
1

我正在使用wix安装程序覆盖(阅读:修改现有的注册表值),添加新的等。卸载时,我需要恢复它们回到它们的原始状态(我修改)。由于这不被Wix支持,因此我必须使用自定义操作(因为我读了),我想运行一个exe文件,它将使用reg import运行.reg文件。根据此网站:http://www.installsite.org/pages/en/isnews/200108/index.htm我的自定义操作必须运行After="InstallFinalize",因为wix回滚会删除我的注册表导入(作为回滚的一部分)。 所以基本上看起来像这样:安装程序修改注册表值,卸载程序删除所有触及的注册表更改(部分回滚),我的exe将恢复它们。Wix - 如何在卸载后执行installfinalize后运行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

谢谢您的帮助!

+0

在这里没有看到整个图片...你在哪里修改注册表值?您担心回滚操作会在哪里恢复您的更改?从我们在这里看到的,除了延迟操作必须在'InstallInitialize'和'InstallFinalize'之间运行,您的操作只能在卸载时运行,取消操作时的操作会有所不同。意味着您的exe只能在卸载时运行,在延迟的上下文中,在(un)安装完成之前的某个时候。 – 2014-10-31 00:13:39

回答

2

According to this site: http://www.installsite.org/pages/en/isnews/200108/index.htm my custom action has to run After="InstallFinalize" because the wix rollback would delete my registry import (as part of the rollback).

你能指定这个网站上提到的地方吗?我正在查看它,但无法找到您的操作应该以After="installFinelize"运行的原因。

什么它提到,是

Deferred, rollback and commit custom actions can only be placed between InstallInitialize and InstallFinalize

哪个是你错误的原因:你有延迟的作用,但要经过 installfinalize运行它

如果安装(或卸载)中止(例如用户取消时),则会执行回滚脚本。我想你可以简单地用Before="InstallFinalize"来运行你的动作。

+0

它在安装执行序列中。 “第二阶段是目标计算机被修改的地方,即文件被复制,注册表项被写入等。” 我的回滚意思是回滚安装程序所做的所有更改,例如,删除安装文件夹,回滚安装过程中对注册表执行的更改(读取:删除它们)。所以根据该网站,我需要运行EXE后,因为如果不是,那么我的EXE会恢复注册表,只有被WIX删除。或者我在这里误解了什么? – sceiler 2014-10-30 22:05:28

+0

这些现有的注册表项是否被覆盖或由安装程序创建?在第一种情况下,我不确定他们是否会被默认的卸载删除......不过,如果您想确保脚本在注册表删除步骤后执行,我认为您可以使用'After =' RemoveRegistryValues'(但必须在安装完成之前,因为在此之后无法执行延迟操作)。不幸的是我目前无法测试它,但基于文档它应该可以工作。 – 2014-10-31 01:33:39