Как определить, установлен ли и запущен ли Sql Server Express на компьютере в установщике WiX?

Я хочу проверить перед установкой моего приложения и, если оно не установлено и не запущено, сообщить пользователю, что оно должно быть установлено перед установкой моего приложения.

9
Krzysztof Kozmic 26 Мар 2009 в 11:34

3 ответа

Лучший ответ

Я попробовал решение Кшиштофа (см. Выше), но на некоторых машинах при использовании этого подхода оно неправильно определяло, когда не установлен 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>

Немного хакерский, но, похоже, работает достаточно хорошо для наших клиентов (использовали условия в компонентах, а не пример условий запуска, показанный выше)

6
Bittercoder 12 Ноя 2009 в 06:13

Хорошо, методом проб и ошибок я нашел, что работает:

<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>
11
Krzysztof Kozmic 26 Мар 2009 в 13:43
Отлично, просто коснитесь той же проблемы. Сначала я подумал, что это не сработает в случае установки как SQL Server Standard, так и Express, но затем заметил "> <", который после небольшого поиска, который я обнаружил, означает, что left содержит right, как ни странно, я не мог найти упоминания оператора условного выражения, упомянутого в документации Wix, но нашел его здесь: tramontana.co .hu / wix / lesson6.php.
 – 
Bittercoder
12 Ноя 2009 в 02:26
Вы не найдете значение InstalledInstance в 64-битной версии Windows.
 – 
jmayor
23 Авг 2010 в 22:00

Принятый ответ выше всегда соответствовал условию для меня. Я получил его, используя:

<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>
1
patrickbadley 11 Июл 2012 в 17:08
Похоже, что все ответы основаны на одном и том же предположении - что экземпляр SQL Express установлен с именем экземпляра SQLEXPRESS. Хотя этот является значением по умолчанию, его можно изменить.
 – 
Damien_The_Unbeliever
11 Июл 2012 в 17:15
Это правда, поэтому вместо SQLEXPRESS вы должны проверить имя экземпляра, которое вам нужно, каким бы оно ни было.
 – 
patrickbadley
16 Июл 2012 в 17:18