2009-03-26 9 views

Répondre

11

Ok, j'ai trouvé par essais et l'option d'erreur qui fonctionne:

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

Je définir une recherche de registre, puis vérifiez sa valeur:

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

Parfait, juste frappé le même problème. Au début, je pensais que cela ne fonctionnerait pas dans le cas où SQL Server Standard et Express étaient installés, mais j'ai remarqué le "><" qui, après un peu de creusement j'ai découvert que le gauche contient bien, bizarrement je ne pouvais pas trouver la mention de cet opérateur d'expression conditionnelle mentionné dans les documents Wix, mais l'avez trouvé ici: http://www.tramontana.co.hu/wix/lesson6.php. – Bittercoder

+0

Vous ne trouverez pas la valeur InstalledInstance sur la version Windows 64 bits. – jmayor

+0

vous devez passer au Wow6432Node au lieu de HKLM \ SOFT .. \ MSFT .. – jmayor

5

J'ai essayé la solution de Krzysztof (ci-dessus) - mais sur certaines machines lors de l'utilisation de cette approche, il ne détectait pas correctement quand ils avaient pas ont installé Sql Express.

Cela semblait provenir d'une mauvaise gestion de la valeur de Registre REG_MULTI_SZ InstalledInstances? Comme je vérifiais pour voir si je devais arrêter/redémarrer le service Sql Server Express dans le programme d'installation, j'ai décidé de vérifier plutôt à la place - alors voici mon alternative, où je vérifie simplement le service à la place:

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

peu un hack, mais semble fonctionner assez bien pour nos clients (utilisaient les conditions dans les composants, plutôt que les conditions de lancement d'exemple ci-dessus)

0

la réponse acceptée ci-dessus était toujours passer la condition pour moi. Je l'ai obtenu en utilisant:

<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

Toutes les réponses semblent faire la même supposition - que l'instance SQL Express est installée avec un nom d'instance de 'SQLEXPRESS'. Alors que * est * la valeur par défaut, elle est modifiable. –

+0

Cela est vrai, donc à la place de SQLEXPRESS vous devriez vérifier le nom de l'instance dont vous avez besoin, quel qu'il soit. – patrickbadley

Questions connexes