2009-05-12 26 views
5

Chciałbym sprawdzić, czy Crystal Reports Basic for Visual Studio 2008 jest instalowany jako warunek dla mojego własnego pakietu instalacyjnego.Jak sprawdzić zainstalowany pakiet w WiX 3.0?

Znalazłem to w opis programu inicjującego dla tego produktu (C: Program Files \ \ Microsoft SDK \ Windows \ v6.0A \ inicjującego \ 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> 

Próbując naśladować to zachowanie w Wix zrobiłem następujące:

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

Ale wydaje się, że ComponentSearch szuka składników pakietu (pliki, katalogi), które mają swoje własne identyfikatory, a nie szuka samego opakowania.

Jak mogę to zrobić?

Odpowiedz

1

Interfejs API instalatora systemu Windows ma w tym celu funkcję MsiQueryProductState w msi.dll. Niestety będziesz musiał napisać niestandardową akcję, aby użyć tego w swoim instalatorze. Zespoły w C:\Program Files\Windows Installer XML v3\SDK mogą to ułatwić.

+0

Interesujące, ale nie sądzę, że będę miał czas, aby zagłębić się w działania niestandardowe. Na razie. – Mac

3

Jak sugeruje here:

Spróbuj wyszukać rejestru pod HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{productcode}. Rozważ również wyszukiwanie pod numerem HKCU, jeśli zarówno produkt, jak i zależność są produktami dla poszczególnych użytkowników.

To idzie tak:

<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 za unikanie działań niestandardowych, ale uwaga: AFAIK to nieudokumentowane i dlatego zasadniczo nieobsługiwane. Następujący post Raymonda Chen przychodzi na myśl: http://blogs.msdn.com/oldnewthing/archive/2003/11/03/55532.aspx –

+0

Dzięki za wskazanie tego. – Mac

+0

Zaproponowano rozwiązanie w 100% obsługiwane bez niestandardowych działań: http://article.gmane.org/gmane.comp.windows.devel.wix.user/38263 Ale nie mam czasu, aby przetestować go teraz, i potrzebowałbym uaktualnienia identyfikatora GUID dla CR, którego jeszcze nie wiem, jak odzyskać. – Mac

2

Można użyć 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> 

Teraz jest nieco trudne do znalezienia Upgrade Code (podany identyfikator atrybutu powyżej). Jeśli masz pakiet MSI, po prostu spójrz na to przez Orca. Jeśli nie, spróbuj this solution.

Powiązane problemy