WIX Installer配置问题:关闭SQL Express安装窗口时阻止主程序安装
问题根因
当前你的WIX Bootstrapper没有对SQL Express安装包的退出码做拦截配置,默认场景下用户手动取消SQL安装返回的退出码会被判定为非致命错误,安装链会继续向下执行主程序的MSI包。
解决方案
修改ExePackage节点的配置,新增退出码规则,将用户取消、安装失败等场景的返回值标记为致命错误,终止整个安装流程,修改后的完整代码如下:
<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> <Bundle Name="Bootstrapper" Version="1.0.0.0" Manufacturer="MyCompany" AboutUrl="https://mycompany.ru/" Copyright="All rights reserved" UpgradeCode="1788BF21-18BD-49E8-A572-DD38F9B67A88"> <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"/> <!-- 可选优化:更精确的SQL Express检测逻辑,避免误判已装其他版本SQL的场景 --> <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" Value="SQLEXPRESS" Result="exists" Variable="SQLExpressInstalled_x64" Win64="yes"/> <Chain> <ExePackage SourceFile="SQL2019-SSEI-Expr.exe" DetectCondition="SQLExpressInstalled_x64" Permanent="no"> <!-- 配置SQL安装包的退出码处理规则 --> <!-- 1602=用户手动取消安装,1603=安装失败,0=安装成功,其他非0返回值均判定为错误 --> <ExitCode Value="0" Behavior="success" /> <ExitCode Value="1602" Behavior="error" /> <ExitCode Value="1603" Behavior="error" /> <ExitCode Behavior="error" /> </ExePackage> <MsiPackage SourceFile="MyProgram.msi"></MsiPackage> </Chain> </Bundle> </Wix>
配置说明
- 新增的
ExitCode节点会对SQL安装包的所有返回值做校验:只有返回0才会判定为安装成功,继续执行后续主程序安装;用户取消(返回1602)、安装失败(返回1603)或者其他异常返回值都会直接终止整个安装流程,不会再安装主程序。 - 可选优化了注册表检测逻辑,原来的检测规则只要存在任意版本SQL Server就会跳过SQL安装,修改后只会检测是否存在默认实例名的SQL Express,避免误判。
- 已修复原代码中
Manufacturer属性漏写闭合引号的笔误。
内容的提问来源于stack exchange,提问作者trapped_in_a_corner
相关产品推荐
相关产品推荐

