views:

1654

answers:

2

How do I detect if Sql Server Express is installed and running on a machine in a WiX installer?

I want to check before installing my application and if it's not installed and running, to inform a user that it has to install it first before installing my application.

+5  A: 

Ok, I found by trial and error option that works:

<Property Id="SQLSERVER">
  <RegistrySearch Id="SQLServer" Root="HKLM" Key="SOFTWARE\Microsoft\Microsoft Sql Server" Type="raw" Name="InstalledInstances"/>
</Property>

I define a registry search, and then check its value:

<Condition Message="You don't have SQL Server installed.">
  <![CDATA[SQLSERVER >< SQLEXPRESS]]>
</Condition>
Krzysztof Koźmic
Bittercoder
You wont find the InstalledInstance value on 64Bits Windows version.
jmayor
you need to change to the Wow6432Node instead of HKLM\SOFT..\MSFT..
jmayor
+1  A: 

I tried Krzysztof's solution (above) - but on some machines when using this approach it wasn't correctly detecting when they did not have Sql Express installed.

It looked to be caused by mishandling of the REG_MULTI_SZ InstalledInstances registry value?

As I was checking to see if I needed to stop/restart the Sql Server Express service in the installer, I decided to just check against that instead - so here's my alternative, where I just check for the service instead:

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

Bit of a hack, but seems to work well enough for our customers (were using the conditions within components, rather then the example Launch conditions shown above)

Bittercoder