Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix-如何在安装后运行exe?卸载后完成?_Wix_Wix Extension_Wix3.8 - Fatal编程技术网

Wix-如何在安装后运行exe?卸载后完成?

Wix-如何在安装后运行exe?卸载后完成?,wix,wix-extension,wix3.8,Wix,Wix Extension,Wix3.8,我正在使用wix安装程序覆盖(读取:修改现有注册表值),添加新注册表值等。卸载后,我需要将它们恢复到原始状态(我修改的)。由于Wix不支持此操作,因此我必须使用自定义操作(如我所读),因此我希望运行一个exe,该exe将使用reg import运行.reg文件。根据此站点:我的自定义操作必须在=“InstallFinalize”之后运行,因为wix回滚将删除我的注册表导入(作为回滚的一部分)。 所以本质上它看起来是这样的:安装程序修改注册表值,卸载程序删除所有涉及的注册表更改(回滚的一部分),我

我正在使用wix安装程序覆盖(读取:修改现有注册表值),添加新注册表值等。卸载后,我需要将它们恢复到原始状态(我修改的)。由于Wix不支持此操作,因此我必须使用自定义操作(如我所读),因此我希望运行一个exe,该exe将使用
reg import
运行.reg文件。根据此站点:我的自定义操作必须在=“InstallFinalize”之后运行,因为wix回滚将删除我的注册表导入(作为回滚的一部分)。 所以本质上它看起来是这样的:安装程序修改注册表值,卸载程序删除所有涉及的注册表更改(回滚的一部分),我的exe将恢复它们

所以我按照他的方法做了,用提升的权限启动我的exe,等等。


已安装但未升级ProductCode
但是我得到一个
错误19 ICE77:LaunchRegExe是一个脚本中的自定义操作。它必须在InstallExecuteSequence表C:\Merlin\Main\Demo\KioskDemoSetup\nw\u setup\nw.wxs 250 1 nw\u setup中的InstallInitialize操作和InstallFinalize操作之间排序

谢谢你的帮助

根据此站点:我的自定义操作必须在=“InstallFinalize”之后运行,因为wix回滚将删除我的注册表导入(作为回滚的一部分)

你能指定在那个网站上提到的地方吗?我正在查看它,但找不到您的操作应该在
After=“InstallFinalize”
下运行的原因

它提到的是

延迟、回滚和提交自定义操作只能放在InstallInitialize和InstallFinalize之间

这就是错误的原因:您有一个延迟操作,但希望在installfinalize之后运行它


如果安装(或卸载)被中止,例如当用户取消时,将执行回滚脚本。我认为您可以简单地使用
Before=“InstallFinalize”

运行您的操作,它是按安装执行顺序运行的。“第二个阶段是修改目标计算机,即复制文件、写入注册表项等。”我所说的回滚是指回滚安装程序所做的所有更改,例如删除安装文件夹、回滚安装期间对注册表所做的更改(读:删除它们)。因此,根据该网站,我需要运行exe后,因为如果不是这样,我的exe将恢复注册表,只有被wix删除。或者我误解了什么?这些现有的注册表项是被覆盖的,还是由安装程序创建的?在第一种情况下,我不确定默认卸载是否会删除它们。。。尽管如此,如果您想确保在注册表删除步骤之后执行脚本,我认为您可以在='RemoveRegistryValues'之后使用
(但必须在install finalize之前,因为在此之后无法执行延迟操作)。不幸的是,我目前无法测试它,但根据文档,它应该可以工作。Before=“InstallFinalize”完成了这项工作!没有看到这里的全貌。。。在哪里修改注册表值?您在哪里担心回滚操作恢复您的更改?从这里我们可以看到,除了延迟操作必须在
InstallInitialize
InstallFinalize
之间运行之外,您的操作将只在卸载时运行,这与取消卸载时的行为不同。这意味着您的exe将仅在(un)安装完成之前的某个时间,在延迟的上下文中,在卸载时运行。
            <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>