Как обнаружить SQL Server Express в установщике WiX

Ваш метод вызова должен использовать вашу первую опцию

'Careful about declaring this in a sub, because when that sub ends, the form might get closed.
'It might be best to declare this as an instance var (aka form-level var)
Private DetailsForm As frmOrder

'this could go in an event handler, or anywhere
DetailsForm = New frmOrder(oOrder)
DetailsForm.Show()

Вам нужно будет добавить конструктор к вашему DetailsForm:

Private _oOrder as OrderType

Public Sub New(oOrder As OrderType)
     'Best to save it to a private instance var and process it during Form_Load
     _oOrder = oOrder
End Sub

Затем, когда ваш Form_Load() будет запущен, он может использовать ваш личный экземпляр var для заполнения ваших TextBox заданий, как вы хотите.

Второй, но менее красноречивый подход заключается в добавлении открытого свойства в форму, и после вызова .Show() вы можете присвоить значение DetailsForm.OrderObject = oOrder, а затем обработать переданный объект.

Конструкторский подход лучше, потому что он может быть «проверен компилятором»

9
задан Krzysztof Kozmic 17 March 2019 в 09:15
поделиться

2 ответа

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

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

<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
ответ дан 4 December 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: