Wix自定义动作序列

时间:2018-03-13 14:02:27

标签: c# wix windows-installer bootstrapper

我已尝试安装到我的软件,此软件有一些先决条件。我为他们制作了一个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,重启:无,请求重启:否

2 个答案:

答案 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