2009-11-06 5 views
13

To powinno być łatwe , ale po kilku godzinach jestem pusty. ; (Ustaw właściwość w WiX na podstawie warunku

zrobić przeszukiwanie rejestru (właściwie dwa), bo muszę sprawdzić obu dwóch poprzednich instalacjach, a następnie zainstalować moje nowe pliki do lokalizacji przed instalacja, która została znaleziona

    .
  • Tylko jeden z tych wcześniejszych instaluje faktycznie istnieje.

I wtedy trzeba instalować moje nowe pliki do „InstallLocation” z którym „PROD #” został znaleziony.

<!— Look for the UnInstall key of the 1st possible product --> 
<!— GUID = {E928E024-DEFE-41A7-8469-D338212C4943}   --> 
<Property Id='PROD1'> 
    <RegistrySearch Id='PROD_REG1' 
        Type='raw' 
        Root='HKLM' 
        Key='$(var.REGKEY_PROD1)' 
        Name='InstallLocation' /> 
</Property> 

<!— Look for the UnInstall key of the 2nd possible product --> 
<!— GUID = {A40A9018-DB9D-4588-A591-F012600C6300}   --> 
<Property Id='PROD2'> 
    <RegistrySearch Id='PROD_REG2' 
        Type='raw' 
        Root='HKLM' 
        Key='$(var.REGKEY_PROD2)' 
        Name='InstallLocation' /> 
    </Property> 

<!-- How do I set INSTALL_HERE Property to whichever ‘InstallLocation’ was found? --> 

<!-- Define the directory structure --> 
<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="INSTALL_HERE"> 
     <Directory Id="MAIN_DIRECTORY" Name="MyProduct"/> 
     <Directory Id="HELP_DIRECTORY" Name="Help"/> 
    </Directory> 
</Directory> 
+0

więc starasz się stworzyć 1 instalatora dla 2 różnych produktów, które zostaną zainstalowane na szczycie Którykolwiek jeden znajduje? –

Odpowiedz

22

Poniższe opcje ustawią właściwości A i B na wynik dwóch różnych wyszukiwań rejestru. Jeśli poszukiwanie B była udana, to nadpisuje wartość A o wartości B.

<Property Id="A"> 
    <!-- registry search 1 here --> 
    </Property> 

    <Property Id="B"> 
    <!-- registry search 2 here --> 
    </Property> 

    <SetProperty Id="A" After="AppSearch" Value="[B]"> 
    B 
    </SetProperty> 

Uwaga jak element SetProperty wykorzystuje wartość B dwukrotnie: raz jako Value="[B]" przesłonić wartości A, raz jako tekst warunku akcji niestandardowej. After="AppSearch" zapewnia, że ​​akcja niestandardowa jest wykonywana tuż po wyszukiwaniu rejestru.

Zobacz także this answer of Rob Mensching

+0

Wielkie dzięki! 1> Agent_9191: Tak, to w zasadzie to, co muszę zrobić. Moja aplikacja jest dodatkiem do produktu, a jedynym sposobem, aby dowiedzieć się, gdzie jest "główny" produkt (i czy jest zainstalowany) jest przeglądanie "głównego" produktu Odinstaluj informacje w rejestrze. Mój problem wynika z faktu, że po zaktualizowaniu "głównego" produktu poprzednie informacje o odinstalowaniu zniknęły i zostały zastąpione informacjami o najnowszej aktualizacji. A jeśli zaktualizują go ponownie, będę potrzebował trzeciego wyszukiwania w rejestrze! 2> wcoenen: Tak jak powiedziałem: To powinno być łatwe ", ale ja po prostu NIE otrzymywałem tego. *** Dziękuję za pomoc! *** – Zerren