如何通过Wix在Win7检测SQL Express 2014+、Win10检测2016+
正确实现Wix中按系统版本检测SQL Server Express的方案
你的需求是根据Windows版本对应不同的SQL Express最低版本要求,核心需要完成两个关键步骤:检测系统版本和检测SQL Express版本并做对应版本校验。下面是完整的实现方案:
1. 检测SQL Server Express的版本
首先我们需要从注册表中读取SQL Express的当前版本号,同时兼容32位和64位系统的安装情况:
<!-- 检测SQL Server Express的当前版本,同时覆盖32位/64位系统 --> <Property Id="SQLEXPRVERSION"> <!-- 32位系统或32位SQL Express的路径 --> <RegistrySearch Id="SqlExprVersion32" Key="SOFTWARE\Microsoft\Microsoft SQL Server\SQLEXPRESS\MSSQLServer\CurrentVersion" Name="CurrentVersion" Root="HKLM" Type="raw" Win64="no"/> <!-- 64位系统上64位SQL Express的路径 --> <RegistrySearch Id="SqlExprVersion64" Key="SOFTWARE\Microsoft\Microsoft SQL Server\SQLEXPRESS\MSSQLServer\CurrentVersion" Name="CurrentVersion" Root="HKLM" Type="raw" Win64="yes"/> </Property>
这里说明下:SQL Server的版本号对应关系是:2014对应12.x,2016对应13.x,后续版本以此类推。
2. 按系统版本设置条件校验
Wix内置了VersionNT属性来标识Windows版本:
- Windows 7对应
601 - Windows 10及以上对应
1000及更高值
我们可以基于这个属性编写条件判断,分别针对Win7和Win10做版本校验:
<!-- Windows 7系统的校验条件 --> <Condition Message="您的系统是Windows 7,必须安装SQL Server Express 2014或更高版本,请安装后重试。"> (VersionNT <> 601) OR (SQLEXPRVERSION >= "12.0") </Condition> <!-- Windows 10及以上系统的校验条件 --> <Condition Message="您的系统是Windows 10或更高版本,必须安装SQL Server Express 2016或更高版本,请安装后重试。"> (VersionNT < 1000) OR (SQLEXPRVERSION >= "13.0") </Condition>
补充说明
- 如果用户可能使用自定义实例名的SQL Express,你需要调整注册表搜索路径(把
SQLEXPRESS换成对应的实例名),但如果是默认的SQL Express安装,实例名就是SQLEXPRESS,上面的代码没问题。 - 若
SQLEXPRVERSION为空(即未安装SQL Express),条件会自动不满足,触发提示信息,符合我们的需求。 - 如果你需要覆盖其他Windows版本(比如Win8/8.1),可以在条件中补充对应的逻辑,比如Win8对应
602,你可以决定是否沿用Win7的SQL版本要求。
内容的提问来源于stack exchange,提问作者hot33331
相关产品推荐
相关产品推荐

