2009-05-12 15 views
5

Me gustaría comprobar que Crystal Reports Basic para Visual Studio 2008 esté instalado como condición para mi propio paquete de instalación.¿Cómo verificar el paquete instalado en WiX 3.0?

yo encontramos este programa previo en la descripción de este producto (C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v6.0A \ Bootstrapper \ Packages \ CrystalReports10_5 \ product.xml):

<InstallChecks> 
    <MsiProductCheck Property="CRVSInstalled" Product="{AA467959-A1D6-4F45-90CD-11DC57733F32}"/> 
    <MsiProductCheck Property="CRVSRunTimex86Installed" Product="{CE26F10F-C80F-4377-908B-1B7882AE2CE3}"/> 
    <MsiProductCheck Property="CRVSRunTimex64Installed" Product="{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}. "/> 
</InstallChecks> 

Intentando imitar este comportamiento en WiX, hice lo siguiente:

<Property Id="CRVSINSTALLED"> 
    <ComponentSearch Id="CRVSInstalledSearch" Guid="{AA467959-A1D6-4F45-90CD-11DC57733F32}" /> 
</Property> 
<Property Id="CRVSRUNTIMEX86INSTALLED"> 
    <ComponentSearch Id="CRVSRunTimex86InstalledSearch" Guid="{CE26F10F-C80F-4377-908B-1B7882AE2CE3}" /> 
</Property> 
<Property Id="CRVSRUNTIMEX64INSTALLED"> 
    <ComponentSearch Id="CRVSRunTimex64InstalledSearch" Guid="{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}" /> 
</Property> 
<Condition Message="!(loc.CrystalReportsRequired)">Installed OR CRVSINSTALLED OR CRVSRUNTIMEX86INSTALLED OR CRVSRUNTIMEX64INSTALLED</Condition> 

Pero parece que ComponentSearch está en busca de los componentes del paquete (archivos, directorios) que tienen sus propios identificadores de, en lugar de buscar el propio envase.

Entonces, ¿cómo puedo hacer esto?

Respuesta

1

El API del instalador de Windows tiene la función MsiQueryProductState en msi.dll para hacer esto. Desafortunadamente, tendrá que escribir una acción personalizada para hacer uso de esto en su instalador. Los ensamblajes en C:\Program Files\Windows Installer XML v3\SDK pueden hacer esto más fácil.

+0

Interesante, pero no creo que tenga tiempo para ahondar en acciones personalizadas. Por ahora. – Mac

3

Como sugirió here:

intente una búsqueda del registro en HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{productcode}. También considere buscar bajo HKCU si su producto y la dependencia son productos por usuario.

Esto dice así:

<Property Id="CRVSINSTALLED"> 
    <RegistrySearch Id="CRVSInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{AA467959-A1D6-4F45-90CD-11DC57733F32}" Name="InstallDate" Type="raw" /> 
</Property> 
<Property Id="CRVSRUNTIMEINSTALLED"> 
    <RegistrySearch Id="CRVSRunTimeInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{CE26F10F-C80F-4377-908B-1B7882AE2CE3}" Name="InstallDate" Type="raw" /> 
</Property> 
<Property Id="CRVSRUNTIMEINSTALLED"> 
    <RegistrySearch Id="CRVSRunTimeInstalledSearch" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}" Name="InstallDate" Type="raw" /> 
</Property> 
+1

+1 para evitar acciones personalizadas, pero cuidado: AFAIK esto no está documentado y, por lo tanto, en principio no es compatible. Me viene a la mente la siguiente publicación de Raymond Chen: http://blogs.msdn.com/oldnewthing/archive/2003/11/03/55532.aspx –

+0

Gracias por señalar esto. – Mac

+0

Se ha sugerido una solución 100% compatible sin acciones personalizadas aquí: http://article.gmane.org/gmane.comp.windows.devel.wix.user/38263 Pero no tengo tiempo para probarlo ahora mismo, y necesitaría el GUID de actualización para CR, que aún no sé cómo recuperar. – Mac

2

Usted puede utilizar Upgrade table

<Upgrade Id="36E76465-5548-390F-955A-2776582C6A6C"> 
    <UpgradeVersion OnlyDetect="yes" Property="TFSCLIENT" Minimum="11.0.50727" /> 
</Upgrade> 
<Condition Message="ERROR: Team Explorer for Microsoft Visual Studio 2012 is not installed"> 
    Installed OR TFSCLIENT 
</Condition> 

Ahora el truco es encontrar código de actualización (especificado en atributo id arriba). Si tiene un paquete MSI, solo mire Orca. Si no lo hace, intente this solution.

Cuestiones relacionadas