如何检测是否在WiX安装程序中的计算机上安装并运行了Sql Server Express?
我想在安装我的应用程序之前进行检查,如果它没有安装并运行,请在安装我的应用程序之前通知用户必须先安装它。
我尝试过Krzysztof的解决方案(上图) - 但是在使用这种方法的某些机器上,它没有正确检测何时没有安装Sql Express。
它看起来是由错误处理REG_MULTI_SZ InstalledInstances注册表值引起的?
当我检查是否需要在安装程序中停止/重新启动Sql Server Express服务时,我决定只是检查 - 所以这是我的替代方案,我只是检查服务:
<Property Id="SQLEXPRESSINSTALLED" >
<RegistrySearch Id="IsSqlExpressServiceInstalled" Root="HKLM" Key="SYSTEM\CurrentControlSet\services\MSSQL$SQLEXPRESS" Name="Description" Type="raw" Win64="no"/>
</Property>
<Condition Message="Express Not Installed">SQLEXPRESSINSTALLED</Condition>
<Condition Message="Express Installed">NOT SQLEXPRESSINSTALLED</Condition>
有点破解,但似乎对我们的客户来说运行得很好(使用组件内的条件,而不是上面显示的示例启动条件)
好的,我发现通过试错法选项有效:
<Property Id="SQLSERVER">
<RegistrySearch Id="SQLServer" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft Sql Server" Type="raw" Name="InstalledInstances"/>
</Property>
我定义了一个注册表搜索,然后检查它的值:
<Condition Message="You don't have SQL Server installed.">
<![CDATA[SQLSERVER >< SQLEXPRESS]]>
</Condition>
上面接受的答案总是为我传递条件。我使用它了:
<Property Id="SQLSERVER_INSTANCE">
<RegistrySearch Id="SQLServerRegSearch" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft Sql Server\Instance Names\SQL" Type="raw" Name="SQLEXPRESS"/>
</Property>
<Condition Message="You don't have SQL Server installed.">
<![CDATA[SQLSERVER_INSTANCE]]>
</Condition>