我正在使用WiX Burn 3.8构建托管代码引导程序应用程序。其中一个PackageGroups包含ExePackage元素,用于在Windows Server 2003上安装Windows Installer 4.5。软件包的x86版本如下所示。 (以下代码片段略有改动,以避免暴露任何敏感的客户端信息。)
<!-- Microsoft Windows Installer 4.5 Redistributable x86 -->
<ExePackage Id="WindowsServer2003_KB942288_v4_x86.exe"
DisplayName="Microsoft Windows Installer Redistributable x86"
SourceFile="{a_path}\WindowsServer2003-KB942288-v4-x86.exe"
Name="redist\Windows_Installer\WindowsServer2003-KB942288-v4-x86.exe"
InstallCommand="/q /norestart"
RepairCommand="/q /norestart"
DetectCondition="VersionMsi >= v4.5 AND Not VersionNT64"
InstallCondition="InstallSqlExpress = "yes" AND VersionMsi < v4.5 AND VersionNT = v5.2 AND Not VersionNT64"
Compressed="no"
DownloadUrl="http://downloads.{mycompany}.com/{some_path}/WindowsServer2003-KB942288-v4-x86.exe"
Permanent="yes"
SuppressSignatureVerification="no">
<!-- Exit codes
0 = Success, no reboot required
3010 = Success, reboot required
-->
<ExitCode Value="0" Behavior="success" />
<ExitCode Value="3010" Behavior="forceReboot" />
<ExitCode Behavior="error"/>
</ExePackage>
Burn似乎没有重新启动或重新启动后宣传,我不知道为什么。我正在传递/q
和/norestart
命令行参数,并将3010退出代码标识为需要重新启动,如MSDN's Windows Installer Redistributables文档中所述。
安装程序日志(下面的时间戳信息已修整)显示正在重新启动。您可以在下面看到来自Burn引擎和我的托管引导程序应用程序的日志事件的组合:
Restart requested by WindowsServer2003_KB942288_v4_x86.exe: RestartInitiated
Applied execute package: WindowsServer2003_KB942288_v4_x86.exe, result: 0x0, restart: Initiated
ApplyComplete. Result: None
State changed. Status: 0
Must reboot. Showing warning.
Apply complete, result: 0x0, restart: Initiated, ba requested restart: No
Exiting UI.
Shutting down, exit code: 0x0
Shutting down. Restart: RestartInitiated
Bootstrapper application requested restart at shutdown. Planned to restart already: No.
Exit code: 0x0, restarting: Yes
Restarting computer...
=======================================
Burn引擎会将注册表项写入HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
。 GUID键具有以下值,看起来应该在重新启动后恢复引导程序:
"C:\Documents and Settings\All Users\Application Data\Package Cache\{a_guid}\{my_burn_installer}.exe" /burn.log.append "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\{my_installer}{timestamp}.log" "/PARENTEXE=C:\Documents and Settings\Administrator\Desktop\{my_nsis_installer}.exe" {two_more_command_line_params} /burn.runonce
我已经检查了注册表项中列出的文件路径,我看到了基于Burn的安装程序和state.rsm
文件。但是,当日志显示时,系统不会重新启动,并且在手动重新启动系统后安装程序不会恢复。
从上面可以看出,Burn引导程序包装在NSIS包中以安装Windows Imaging Component,这是在Windows Server 2003上安装.NET Framework 4的先决条件。请参阅{{3}有关为何必要的详细信息。我不相信这是问题的根源,因为基于Burn的引导程序从包缓存运行,但我可能是错的。
我在没有应用更新的32位Windows Server 2003 R2标准版Hyper-V虚拟机上进行测试。
答案 0 :(得分:2)
使用WiX v3.9。它包括fix for when the RunOnce key is too long on XP/2003和ability to install multiple prereq packages(正如我在链接问题中所解释的那样)。
对于没有重启的计算机,这是一个谜。由于Burn在调用InitiateSystemShutdownEx
时不会强制关闭应用程序,因此应用程序可能会阻止关闭。