代码之家  ›  专栏  ›  技术社区  ›  Krzysztof Kozmic

如何在WIX安装程序中检测SQL Server Express

  •  8
  • Krzysztof Kozmic  · 技术社区  · 15 年前

    如何检测SQL Server Express是否已安装并在WIX安装程序中的计算机上运行?

    我想在安装我的应用程序之前进行检查,如果它没有安装和运行,通知用户在安装我的应用程序之前必须先安装它。

    3 回复  |  直到 12 年前
        1
  •  11
  •   Krzysztof Kozmic    15 年前

    好的,我通过试用和错误选项找到了:

    <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>
    
        2
  •  5
  •   Bittercoder    15 年前

    我尝试了krzysztof的解决方案(如上所述),但在一些机器上使用这种方法时,没有正确地检测到什么时候使用了这种方法。 安装了SQL Express。

    它看起来是由错误处理注册表中安装的注册表值造成的?

    当我在检查是否需要在安装程序中停止/重新启动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>
    

    有点像黑客,但对我们的客户来说似乎工作得很好(使用组件中的条件,而不是上面显示的示例发布条件)

        3
  •  0
  •   patrickbadley    12 年前

    上面被接受的回答总是符合我的条件。我用以下方法使它工作:

    <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>