【发布时间】:2009-03-26 08:34:12
【问题描述】:
如何通过 WiX 安装程序检测 Sql Server Express 是否已安装并在机器上运行?
我想在安装我的应用程序之前进行检查,如果它没有安装并运行,通知用户在安装我的应用程序之前必须先安装它。
【问题讨论】:
标签: sql-server installation wix
如何通过 WiX 安装程序检测 Sql Server Express 是否已安装并在机器上运行?
我想在安装我的应用程序之前进行检查,如果它没有安装并运行,通知用户在安装我的应用程序之前必须先安装它。
【问题讨论】:
标签: sql-server installation wix
好的,我通过反复试验找到了可行的选项:
<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>
【讨论】:
我尝试了 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_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>
【讨论】:
SQLEXPRESS。虽然 是 默认值,但它是可以更改的。