我已尝试安装到我的软件,此软件有一些先决条件。我为他们制作了一个Bootstrapper wix并尝试单独运行它们而不是在Main Wix安装程序中似乎工作正常。当我试图附加我从Wix安装程序中的Bootstrapper获得的EXE时,我开始失败。 先决条件引导程序有.Net和MS C ++,问题似乎是当我的Wix安装程序调用先决条件时,正好在C ++安装时它会中断。但是,如果我尝试单独安装Prerequisites EXE,它可以正常工作。 我尝试将其称为文件,并在两种情况下都将二进制文件称为失败。以下是我的称呼方式:
<!-- <Binary Id="SQl_Insta.exe" SourceFile="Prerequisites\bin\Debug\Prerequisites.exe"/>
-->
<Property Id="prerequisites_insta" Value="command line to run"/>
<CustomAction Id="prerequisites_insta" FileKey="prerequist_ID" ExeCommand="-install"
Impersonate="yes" Return="check" />
<!--
<CustomAction Id="prerequisites_insta" Directory="Setup"
Execute="deferred" Impersonate="no" Return="ignore"
ExeCommand="[Setup]Prerequisites.exe -install" />-->
我想要的顺序是在将文件复制到程序文件后安装它们
<InstallExecuteSequence>
<Custom Action="prerequisites_insta" Before="InstallFiles">Not Installed</Custom>
</InstallExecuteSequence>
错误:
[18F0:04C0] [2018-03-13T14:01:04] w348:请求申请重试 包:vcredist_x64.exe,遇到错误:0x80070652。重试... [173C:176C] [2018-03-13T14:01:07] i301:应用执行包: vcredist_x64.exe,action:Install,path:C:\ ProgramData \ Package 缓存\ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe, 参数:&#39;&#34; C:\ ProgramData \ Package 缓存\ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe&#34; / QB / norestart更新日志文件&#39; [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,action:Install,path:C:\ ProgramData \ Package 缓存\ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe, 参数:&#39;&#34; C:\ ProgramData \ Package 缓存\ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe&#34; / QB / norestart更新日志文件&#39; [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,action:Install,path:C:\ ProgramData \ Package 缓存\ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe, 参数:&#39;&#34; C:\ ProgramData \ Package
缓存\ 13674C43652B941DAFD2049989AFCE63CB7C517B \ vcredist_x64.exe&#34; / QB / norestart更新日志文件&#39; [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 缓存\ 13674C43652B941DAFD2049989AFCE63CB7C517B \ [173C:176C] [2018-03-13T14:01:24] i351:删除缓存包: NDP452_KB2901907_x86_x64_AllOS_ENU.exe,来自路径: C:\ ProgramData \包 缓存\ 89F86F9522DC7A8A965FACCE839ABB790A285A63 \ [173C:176C] [2018-03-13T14:01:24] i351:删除缓存包: dotnetfx35.exe,来自路径:C:\ ProgramData \ Package 缓存\ 3DCE66BAE0DD71284AC7A971BAED07030A186918 \
[173C:176C] [2018-03-13T14:01:24] i372:会话结束,注册码: SOFTWARE \微软\的Windows \ CurrentVersion \卸载{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 \微软\的Windows \ CurrentVersion \卸载{a94dd5f5-3343-45c7- ab0b-17c3ba9e8644},恢复:无,重启已启动:否,禁用 简历:否[18F0:04C0] [2018-03-13T14:01:24] i399:申请完成, 结果:0x80070652,重启:无,请求重启:否
答案 0 :(得分:1)
错误0x80070652是&#34;另一个安装正在进行中&#34;。您无法运行递归MSI安装或同时安装MSI - 您的MSI无法调用另一个基于MSI的安装,也无法同时运行两个基于MSI的安装。从(部分?)日志中很难分辨出基于MSI的安装是在同一时间发生的。
答案 1 :(得分:1)
您是否已经制作了 WiX Burn捆绑包有点不清楚?如果你这样做了,那么你已经有了解决方案:通过Burn引导程序依次运行MSI文件,而不是并行运行或使用自定义动作递归运行。
正如Phil所说,Windows Installer一次只能运行一个InstallExecuteSequence
。每个MSI文件中都有一个这样的序列 - 每次触发一个mutex就会设置。这可以防止其他MSI文件启动另一个这样的序列,直到第一个完成。
在技术方面,这样做是为了允许对系统进行的所有更改都可以作为更改事务回滚&#34;与数据库事务中发生的事情一致。
使用WiX Burn引导程序的一个主要原因是避免此技术MSI问题。还有其他原因,例如允许启动EXE文件和其他非MSI格式的可安装文件。以下是一个Burn项目示例:https://github.com/frederiksen/Classic-WiX-Burn-Theme。还有:The official Burn documentation。