2009-11-06 26 views
13

Esta debería ser fácil, pero después de varias horas apareceré en blanco. ; (Establezca una propiedad en WiX según una condición

hago una búsqueda de registro (en realidad dos), porque necesito para comprobar si hay ya sea de dos instalaciones anteriores y luego instalar mis nuevos archivos a la ubicación de la previa instalación que se encontró

    .
  • Sólo uno de estas instalaciones anteriores existirá realmente.

entonces necesito para instalar mis nuevos archivos a la 'iNSTALLLOCATION' de los cuales 'PROD #' fue encontrado.

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

Así que usted está tratando de crear instalador 1 de 2 productos diferentes que se van a instalar en la parte superior de lo que uno se encuentra? –

Respuesta

22

Lo siguiente establecerá las propiedades A y B en el resultado de dos búsquedas de registro diferentes. Si la búsqueda de B fue exitosa, se anula el valor de A con el valor 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> 

Nota cómo el elemento SetProperty utiliza el valor de B dos veces: una vez como Value="[B]" para anular el valor de A, y una vez como el texto de condición de la acción personalizada. El After="AppSearch" asegura que la acción personalizada se ejecuta justo después de las búsquedas de registro.

Ver también this answer of Rob Mensching

+0

Muchas gracias! 1> Agent_9191: Sí, eso es básicamente lo que tengo que hacer. Mi aplicación está en el complemento de un producto, y la única manera en que puedo saber dónde está instalado el producto 'principal' (y si está instalado) es mirando la información de desinstalación del producto 'principal' en el Registro. Mi problema proviene del hecho de que cada vez que se actualiza el producto 'principal', la información de desinstalación anterior se ha ido y se reemplaza por la información de la última actualización. Y si lo vuelven a actualizar, necesitaré una tercera búsqueda en el Registro. 2> wcoenen: Como dije: Esto debería ser fácil ", pero simplemente NO lo conseguía. *** ¡Gracias por tu ayuda! *** – Zerren

Cuestiones relacionadas