2009-11-06 10 views
13

Questo dovrebbe essere essere facile, ma dopo diverse ore, mi viene in bianco. ; (Impostare una proprietà in WiX in base a una condizione

faccio una ricerca Registro di sistema (in realtà due), perché ho bisogno di verificare la presenza di uno di due installazioni precedenti e quindi installare i miei nuovi file nella posizione della prima installazione è che si trovava

    .
  • Solo uno di queste installazioni precedenti sarà effettivamente esistere.

ho quindi bisogno di installare i miei nuovi file alla 'InstallLocation' di cui 'CODICE #' è stato trovato.

01.235.164,106 mila
<!— 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

Così si sta cercando di creare 1 installer per 2 prodotti diversi che si installa in cima a seconda di quale uno si trova? –

risposta

22

Quanto segue imposterà le proprietà A e B al risultato di due diverse ricerche di registro. Se la ricerca di B era successo, si sostituisce il valore di A con il valore di 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> 

Si noti come l'elemento SetProperty utilizza il valore di B due volte: una volta come Value="[B]" di ignorare il valore di A, e una volta come il testo della condizione dell'azione personalizzata. After="AppSearch" assicura che l'azione personalizzata venga eseguita subito dopo le ricerche del registro.

Vedi anche this answer of Rob Mensching

+0

Mille grazie! 1> Agent_9191: Sì, questo è fondamentalmente quello che devo fare. La mia app è in aggiunta a un prodotto e l'unico modo per sapere dove è installato il prodotto "principale" (e se è installato) è guardare le informazioni di disinstallazione del prodotto "principale" nel registro. Il mio problema deriva dal fatto che ogni volta che il prodotto 'principale' viene aggiornato, le precedenti informazioni di disinstallazione sono scomparse e sostituite dalle informazioni dell'ultimo aggiornamento. E se lo aggiornano di nuovo, ho bisogno di una terza ricerca del registro! 2> wcoenen: Come ho detto: questo dovrebbe essere facile ", ma non volevo farlo *** Grazie per il tuo aiuto! *** – Zerren

Problemi correlati