Wix自定义动作序列

我试图安装到我的软件,这个软件有一些先决条件。 我为他们制作了一个Bootstrapper wix并尝试单独运行它们而不是在Main Wix安装程序中似乎工作正常。 当我试图连接我从Wix安装程序中的Bootstrapper获得的EXE时,我开始出现故障。 先决条件引导程序有.Net和MS C ++,问题似乎是当我的Wix安装程序调用先决条件时,并且恰好在C ++安装时它会中断。 但是,如果我尝试单独安装Prerequisites EXE,它可以正常工作。 在两种情况下,我都试图将其称为文件和二进制文件,但是我失败了。 这是我如何称呼它:

<!--  -->   <!-- --> 

我想要的顺序是在将文件复制到Program文件后安装它们

  Not Installed  

错误 :

[18F0:04C0] [2018-03-13T14:01:04] w348:应用程序请求重试包:vcredist_x64.exe,遇到错误:0x80070652。 重试… [173C:176C] [2018-03-13T14:01:07] i301:应用执行包:vcredist_x64.exe,操作:安装,路径:C:\ ProgramData \ Package Cache \ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe,参数:’“C:\ ProgramData \ Package Cache \ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe”/ qb / norestart'[173C:176C] [2018-03-13T14:01:11] e000:错误0x80070652:进程返回错误:0x652 [ 173C:176C] [2018-03-13T14:01:11] e000:错误0x80070652:无法执行EXE包。 [18F0:04C0] [2018-03-13T14:01:11] e000:错误0x80070652:无法配置每台机器的EXE包。 [18F0:04C0] [2018-03-13T14:01:11] w348:应用程序请求重试包:vcredist_x64.exe,遇到错误:0x80070652。 重试… [173C:176C] [2018-03-13T14:01:14] i301:应用执行包:vcredist_x64.exe,操作:安装,路径:C:\ ProgramData \ Package Cache \ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe,参数:’“C:\ ProgramData \ Package Cache \ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe”/ qb / norestart'[173C:176C] [2018-03-13T14:01:17] e000:错误0x80070652:进程返回错误:0x652 [ 173C:176C] [2018-03-13T14:01:17] e000:错误0x80070652:执行EXE包失败。 [18F0:04C0] [2018-03-13T14:01:17] e000:错误0x80070652:无法配置每台机器的EXE包。 [18F0:04C0] [2018-03-13T14:01:17] w348:应用程序请求重试包:vcredist_x64.exe,遇到错误:0x80070652。 重试… [173C:176C] [2018-03-13T14:01:20] i301:应用执行包:vcredist_x64.exe,操作:安装,路径:C:\ ProgramData \ Package Cache \ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe,参数:’“C:\ ProgramData \ Package
Cache \ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe“/ qb / norestart'[173C:176C] [2018-03-13T14:01:24] e000:错误0x80070652:进程返回错误:0x652 [173C:176C] [2018-03-13T14 :01:24] e000:错误0x80070652:无法执行EXE包。[18F0:04C0] [2018-03-13T14:01:24] e000:错误0x80070652:无法配置每台机器的EXE包。[18F0:04C0 ] [2018-03-13T14:01:24] i319:应用执行包:vcredist_x64.exe,结果:0x80070652,重启:无[18F0:04C0] [2018-03-13T14:01:24] e000:错误0x80070652:无法执行EXE包。[173C:176C] [2018-03-13T14:01:24] i351:从路径中删除缓存包:vcredist_x64.exe:C:\ ProgramData \ Package Cache \ 13674C43652B941DAFD2049989AFCE63CB7C517B \ [173C:176C] [2018-03-13T14:01:24] i351:删除缓存包:NDP452_KB2901907_x86_x64_AllOS_ENU.exe,路径:C:\ ProgramData \ Package Cache \ 89F86F9522DC7A8A965FACCE839ABB790A285A63 \ [173C:176C] [2018-03-13T14:01:24] i351:从路径:C:\ Pr中删除缓存包:dotnetfx35.exe ogramData \ Package Cache \ 3DCE66BAE0DD71284AC7A971BAED07030A186918 \
[173C:176C] [2018-03-13T14:01:24] i372:会话结束,注册码:SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall {a94dd5f5-3343-45c7- ab0b-17c3ba9e8644},恢复:无,重启:无,禁用简历:否[173C:176C] [2018-03-13T14:01:24] i330:已删除捆绑依赖提供程序:{a94dd5f5-3343-45c7-ab0b-17c3ba9e8644} [173C:176C] [2018-03 -13T14:01:24] i352:从路径中移除缓存的包:{a94dd5f5-3343-45c7-ab0b-17c3ba9e8644}:C:\ ProgramData \ Package Cache \ {a94dd5f5-3343-45c7-ab0b-17c3ba9e8644} \ [173C :176C] [2018-03-13T14:01:24] i371:更新会话,注册密钥:SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall {a94dd5f5-3343-45c7- ab0b-17c3ba9e8644},恢复:无,重启已启动:否,禁用恢复:否[18F0:04C0] [2018-03-13T14:01:24] i399:应用完成,结果:0x80070652,重启:无,请求重启:否

该错误0x80070652是“另一个安装正在进行中”。 您无法运行递归MSI安装或同时安装MSI – 您的MSI无法调用另一个基于MSI的安装,也无法同时运行两个基于MSI的安装。 从(部分?)日志中很难分辨出基于MSI的安装是在同一时间发生的。

你是否已经制作了WiX Burn套装还有点不清楚? 如果您这样做,那么您已经有了解决方案: 通过Burn引导程序依次运行MSI文件,而不是并行运行或使用自定义操作递归运行


正如Phil所说,Windows Installer一次只允许一个InstallExecuteSequence运行。 每个MSI文件中都有一个这样的序列 – 每次触发一个互斥锁时都会设置互斥锁 。 这可以防止其他MSI文件启动另一个这样的序列,直到第一个完成。

在技​​术方面,这样做是为了允许对系统进行的所有更改作为“更改事务”回滚,这与数据库事务中发生的事情一致。


使用WiX Burn引导程序的一个关键原因是避免这种技术MSI问题。 还有其他原因,例如允许启动EXE文件和非MSI格式的其他可安装文件。 这是一个Burn项目示例: https : //github.com/frederiksen/Classic-WiX-Burn-Theme 。 还有: 官方的Burn文档 。