2009-03-26 18 views
8

Come posso rilevare se Sql Server Express è installato e in esecuzione su una macchina in un programma di installazione WiX?Come rilevare SQL Server Express nell'installer WiX

Voglio verificare prima di installare la mia applicazione e se non è installata e in esecuzione, per informare un utente che deve installarlo prima di installare la mia applicazione.

risposta

11

Ok, ho trovato dall'opzione errore di prova e che funziona:

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

mi definiscono una ricerca Registro di sistema e quindi controllare il suo valore:

<Condition Message="You don't have SQL Server installed."> 
    <![CDATA[SQLSERVER >< SQLEXPRESS]]> 
</Condition> 
+0

Perfetto, basta avere lo stesso problema. All'inizio pensavo che non avrebbe funzionato per il caso in cui sia installato SQL Server Standard & Express, ma poi ho notato il "><" che dopo un po 'di scavo ho scoperto che i mezzi lasciati contengono giusto, stranamente non ho potuto trova menzione di quell'operatore di espressioni condizionali menzionato nei documenti di Wix, ma lo trova qui: http://www.tramontana.co.hu/wix/lesson6.php. – Bittercoder

+0

Non si trova il valore InstalledInstance nella versione Windows 64 bit. – jmayor

+0

è necessario passare a Wow6432Node anziché HKLM \ SOFT .. \ MSFT .. – jmayor

5

ho provato la soluzione di Krzysztof (sopra) - ma su alcune macchine quando si utilizza questo approccio non è stato rilevato correttamente quando hanno fatto non avere installato Sql Express.

Sembra essere causato da una cattiva gestione del valore di registro REG_MULTI_SZ InstalledInstances?

Mentre stavo controllando per vedere se avevo bisogno di arrestare/riavviare il servizio Sql Server Express nel programma di installazione, ho deciso di controllare invece quello - quindi ecco la mia alternativa, dove devo solo verificare il servizio:

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

po 'di hack, ma sembra funzionare abbastanza bene per i nostri clienti (sono stati utilizzando le condizioni all'interno dei componenti, piuttosto che le condizioni esempio lancio mostrate sopra)

0

la risposta accettata sopra è stato sempre superato la condizione per me. Ho funzionato usando:

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

Tutte le risposte sembrano fare la stessa ipotesi: che l'istanza di SQL Express sia installata con un nome di istanza di 'SQLEXPRESS'. Anche se * è * l'impostazione predefinita, è modificabile. –

+0

Questo è vero, quindi al posto di SQLEXPRESS è necessario verificare il nome dell'istanza di cui si ha bisogno, qualunque esso sia. – patrickbadley

Problemi correlati