2009-11-06 7 views
13

Cette devrait être être facile, mais après plusieurs heures je viens vide. ; (Définir une propriété dans WiX basé sur une condition

Je fais une recherche de registre (en fait deux), parce que je dois vérifier soit de deux installations, puis installer mes nouveaux fichiers à l'emplacement de l'avant INSTALL_LIC a été trouvé

    .
  • Seulement un de ces installations avant existera réellement.

Il me faut ensuite installer mes nouveaux fichiers sur le « InstallLocation » dont « PROD # » a été trouvé.

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

Alors vous essayez de créer 1 installation pour 2 produits différents qui sont installés sur les selon l'une se trouve? –

Répondre

22

La commande suivante définira les propriétés A et B sur le résultat de deux recherches de registre différentes. Si la recherche B était Successfull, il remplace la valeur de A avec la valeur de 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> 

Notez comment l'élément SetProperty utilise la valeur de B deux fois: une fois que Value="[B]" pour remplacer la valeur de A, et une fois comme texte de condition de l'action personnalisée. Le After="AppSearch" garantit que l'action personnalisée est exécutée juste après les recherches du Registre.

Voir aussi this answer of Rob Mensching

+0

Merci beaucoup! 1> Agent_9191: Oui, c'est essentiellement ce que je dois faire. Mon application est sur un add-on à un produit, et la seule façon de savoir où le produit 'principal' est installé (et s'il est installé) est en regardant le produit 'principal' Désinstaller info dans le registre. Mon problème vient du fait que chaque fois que le produit 'principal' est mis à jour, l'information de désinstallation précédente est partie et remplacée par l'information pour la dernière mise à jour. Et s'ils le mettent à jour, j'aurai besoin d'une 3ème recherche de registre! 2> wcoenen: Comme je l'ai dit: Cela devrait être facile ", mais je ne l'ai pas compris *** Merci pour votre aide! *** – Zerren

Questions connexes