2009-11-06 12 views
13

Diese sollte einfach sein, aber nach mehreren Stunden komme ich leer. ; (Legen Sie eine Eigenschaft in WiX basierend auf einer Bedingung

ich einen Registry-Suche (eigentlich zwei), weil ich für entweder von zwei vorherigen Installationen überprüfen müssen und installieren Sie dann meine neue Dateien auf die Position des vor, dass gefunden Installation wurde

    .
  • Nur ein dieser früheren Installationen wird tatsächlich existieren.

ich muss dann meine neue Dateien in den ‚INSTALL‘ installieren, von denen ‚ART #‘ gefunden wurde.

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

So auch, die oben auf je nachdem, was man gefunden wird installieren? –

Antwort

22

Im Folgenden werden die Eigenschaften A und B für das Ergebnis von zwei verschiedenen Registrierungssuchen festgelegt. Wenn die Suche nach B erfolgreich war, überschreibt es den Wert von A mit dem Wert von 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> 

Hinweis, wie das SetProperty Element des Wert von B verwendet zweimal: einmal als Value="[B]" den Wert von A außer Kraft zu setzen, und einmal als Bedingungstext der benutzerdefinierten Aktion. Die After="AppSearch" stellt sicher, dass die benutzerdefinierte Aktion direkt nach der Registrierung ausgeführt wird.

Sehen Sie versuchen, ein Installationsprogramm für 2 verschiedene Produkte zu schaffen this answer of Rob Mensching

+0

Vielen Dank! 1> Agent_9191: Ja, das ist im Grunde, was ich tun muss. Meine App ist auf Add-on zu einem Produkt, und die einzige Möglichkeit zu wissen, wo das Hauptprodukt installiert ist (und ob es installiert ist) ist, indem Sie auf das Hauptprodukt Deinstallieren Info in der Registrierung. Mein Problem kommt von der Tatsache, dass jedes Mal, wenn das Hauptprodukt aktualisiert wird, die vorherige Deinstallationsinformation weg ist und durch die Information für das späteste Update ersetzt wird. Und wenn sie es wieder aktualisieren, brauche ich eine 3. Registry-Suche! 2> wcoenen: Wie ich schon sagte: Das sollte einfach sein ", aber ich habe es einfach NICHT bekommen. *** Danke für Ihre Hilfe! *** – Zerren

Verwandte Themen