2009-03-26 14 views

Respuesta

11

Bueno, he encontrado por ensayo y opción de error que funciona:

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

que definen una búsqueda del registro y, a continuación, comprobar su valor:

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

Perfecto, acaba de llegar al mismo problema. Al principio pensé que no funcionaría para el caso de tener ambos SQL Server Standard & Express instalados, pero luego noté el "><" que después de un poco de excavación descubrí que significa que la izquierda contiene el derecho, curiosamente no pude encuentre una mención de ese operador de expresión condicional mencionado en los documentos de Wix, pero lo encontró aquí: http://www.tramontana.co.hu/wix/lesson6.php. – Bittercoder

+0

No encontrará el valor InstalledInstance en la versión de 64 bits de Windows. – jmayor

+0

necesita cambiar al Wow6432Node en lugar de HKLM \ SOFT .. \ MSFT .. – jmayor

5

Probé solución de Krzysztof (arriba) - pero en algunas máquinas cuando se usaba este enfoque no se detectaba correctamente cuando lo hicieron no tienen instalado Sql Express.

Parece que se debe a un mal manejo del valor de registro REG_MULTI_SZ InstalledInstances?

Como estaba revisando para ver si necesitaba detener/reiniciar el servicio Sql Server Express en el instalador, decidí comprobarlo, así que aquí está mi alternativa, donde simplemente verifico el servicio:

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

poco de un truco, pero parece que funciona lo suficientemente bien como para nuestros clientes (estaban usando las condiciones dentro de los componentes, en lugar de las condiciones ejemplo de lanzamiento que se muestran arriba)

0

la respuesta aceptada anteriormente siempre que pasaba la condición para mi. Lo conseguí trabajando 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

Todas las respuestas parecen hacer la misma suposición: que la instancia de SQL Express está instalada con un nombre de instancia de 'SQLEXPRESS'. Mientras que * es * el predeterminado, es modificable. –

+0

Eso es cierto, por lo que en lugar de SQLEXPRESS debe verificar el nombre de la instancia que necesita, cualquiera que sea. – patrickbadley

Cuestiones relacionadas