在 WiX 中重新启动后继续安装

Posted

技术标签:

【中文标题】在 WiX 中重新启动后继续安装【英文标题】:Resume installing after restart in WiX 【发布时间】:2013-06-20 16:22:33 【问题描述】:

我正在尝试使用 WixStandardBootstrapperApplication 创建引导应用程序。除了处理重启之外,它完成了我需要它做的所有事情。

我需要安装一组 EXE 文件。只有第一个是 .NET 4.5,需要重新启动。我会延迟重启,但我不能,因为其他程序之一依赖于它。我尝试使用退出代码强制重新启动,但是当计算机重新启动时,引导程序每次都会卡在该退出代码上,我无法安装其他任何东西。当且仅当程序尚未重新启动(或任何其他逻辑方式)时,是否有方法应用退出代码?

这就是我正在做的......

<ExePackage
  Id               = "NetFx45Redist"
  Cache            = "no"
  Compressed       = "yes"
  PerMachine       = "yes"
  Permanent        = "yes"
  Vital            = "yes"
  InstallCommand   = "/quiet /norestart"

  SourceFile       = "C:\Users\visibleEP\Documents\Visual Studio 2012\Projects\Bootstrapper1\VEP Deploy\Setup Files\dotNetFx45_Full_setup.exe"
  DetectCondition  = "(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))"
  InstallCondition = "(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))">

  <ExitCode Behavior = "forceReboot"/>
</ExePackage>

<ExePackage
  SourceFile = "...\...\Setup Files\Encoder_en.exe"
  InstallCommand = "/q"/>

<ExePackage
  SourceFile = "...\...\Setup Files\vcredist_x86.exe"
  InstallCommand = "/q /ACTION=Install"
  RepairCommand = "/q ACTION=Repair /hideconsole" />

<ExePackage
  SourceFile = "...\...\Setup Files\vcredist_x64.exe"
  InstallCommand = "/q /ACTION=Install"
  RepairCommand = "/q ACTION=Repair /hideconsole" />

【问题讨论】:

可能相关:我遇到的问题是安装程序在重新启动后没有继续。使用 ViX 3.9 而不是 3.7 解决了这个问题。 【参考方案1】:

替换

<ExitCode Behavior="forceReboot"/>

<ExitCode Behavior="forceReboot" Value="1641" />
<ExitCode Behavior="forceReboot" Value="3010" />

1641 和 3010 都是“需要重新启动才能完成安装。此消息表示成功。”

您的版本将所有退出代码视为您观察到的相同。请参阅该安装程序上的the documentation。幸运的是,退出代码已记录在案。

更新: 如果您确信所有成功代码都已记录在案,我添加了已知的成功代码和一个可以是 error 的包罗万象。

<ExitCode Behavior="success" Value="0" />
<ExitCode Behavior="error"/>

【讨论】:

现在的问题似乎是这些代码似乎总是返回,即使已经发生重新启动并且应该已经安装了 .net。我只是希望引导程序跳过安装.net(如果它已经存在),这是检测和安装条件应该做的,但它们似乎没有工作或正在发生其他事情。安装程序正处于需要重新启动的无限循环中。 还有!当 .net 4.5 已经安装在系统上时,它似乎工作正常(即它跳过 .net 安装并完成其余部分)......这对我来说似乎没有意义,因为在重新启动后,.net 是已安装,因此在安装时循环不应继续发生。 我想我修好了!我补充说: 它似乎有效,所以谢谢!! 您知道为什么它在运行时会安装其他 .exe(.net 除外),然后尝试在同一安装中修复它们吗?现在它运行,重新启动,然后安装其他(大概)然后尝试修复它们。如果我为每个点击取消,则设置失败,但一切都已安装。我假设如果我为每个设置都点击修复,它会像上面一样再次重新启动。我注意到,如果我安装 .net,卸载它,然后再次运行安装程序,那么一切安装都没有问题,无需重新启动。 刻录日志可能会对您有所帮助。在 WinKey+R %TEMP% 找到它们。将有一个用于引导程序,一个用于它尝试运行的每个包。

以上是关于在 WiX 中重新启动后继续安装的主要内容,如果未能解决你的问题,请参考以下文章

断电后继续安装

Wix刻录安装程序无法在静默安装时重新启动

“windows无法完成安装,若要继续安装windows,请重新启动计算机”

Wix 安装然后立即尝试修复

计算机意外地重新启动或遇到错误 Windows 安装无法继续 若要安装Windows,请单击 确定 重新启动计算机,然后

iOS 设备重启后继续位置更新