2009-05-12 10 views
5

Vorrei verificare che Crystal Reports Basic per Visual Studio 2008 sia installato come condizione per il mio pacchetto di installazione.Come verificare la presenza di un pacchetto installato in WiX 3.0?

ho trovato questo nella descrizione di avvio automatico di questo prodotto (C: \ Program Files \ Microsoft SDK \ 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> 

Cercando di imitare questo comportamento in WiX, ho fatto la seguente:

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

Ma sembra che ComponentSearch è alla ricerca di componenti del pacchetto (file, directory) che hanno il proprio iD, piuttosto che alla ricerca del pacchetto stesso.

Quindi, come posso fare questo?

risposta

1

Windows Installer API ha la funzione MsiQueryProductState in msi.dll per farlo. Sfortunatamente dovrai scrivere un'azione personalizzata per farne uso nel tuo programma di installazione. Gli assembly in C:\Program Files\Windows Installer XML v3\SDK possono semplificarlo.

+0

Interessante, ma non credo che avrò il tempo di approfondire le azioni personalizzate. Per adesso. – Mac

3

Come suggerito here:

Prova una ricerca Registro di HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{productcode}. Considerare anche una ricerca sotto HKCU se sia il prodotto che la dipendenza sono prodotti per utente.

questo va in questo modo:

<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 per evitare azioni personalizzate ma attenzione: AFAIK non è documentato e quindi in linea di principio non è supportato. Mi viene in mente il seguente post di Raymond Chen: http://blogs.msdn.com/oldnewthing/archive/2003/11/03/55532.aspx –

+0

Grazie per aver segnalato questo. – Mac

+0

Qui è stata suggerita una soluzione supportata al 100% senza azioni personalizzate: http://article.gmane.org/gmane.comp.windows.devel.wix.user/38263 Ma non ho il tempo di testarlo adesso, e avrei bisogno dell'aggiornamento GUID per CR, che non so ancora come recuperare. – Mac

2

È possibile utilizzare 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> 

Ora il po 'complicato è quello di trovare l'aggiornamento codice (indicato in Id attributo sopra). Se si dispone di un pacchetto MSI, basta guardarlo da Orca. Se non lo fai - prova this solution.

Problemi correlati