2012-01-23 16 views
5

Necesito crear un archivo de instalación que compruebe el registro de la versión de otro software. Actualmente estoy comentando y eliminando comentarios de líneas de código para instalaciones separadas. ¿Cómo puedo convertir lo siguiente en un condicional?ID de propiedad de WiX o estado condicional

<!--<Property Id="ACADREG" Value="ACAD-A001:409" /> Autocad 2012--> 
<Property Id="ACADREG" Value="ACAD-A004:409" /> <!--Autocad Arch 2012--> 

También necesito obtener la versión que está para más adelante en la instalación.

<Property Id="ACADROAMDIR"> 
    <RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="RoamableRootFolder" /> 
    </Property> 


    <Property Id="ACADDIR"> 
    <RegistrySearch Id="AcadLocRegistry" Type="raw" Root="HKLM" Key="SOFTWARE\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="AcadLocation" /> 
    </Property> 

¿Hay una manera Wix puede ajustar [ACADREG] mediante la lectura del registro en lugar de mí configurarlo como lo hice anteriormente?

+0

'' elemento se utiliza para leer la información del registro. Luego puede controlar qué componentes, características y acciones se ejecutan según el valor de esta propiedad. –

+0

Puede leer el registro de ambas versiones del software y proporcionar una pantalla al usuario para seleccionar una de ellas ... – vinay

Respuesta

1

Usted puede usar una condición Preprocessor:

<?define AutocadSku = "ACAD2012" ?> 

<?if $(var.AutocadSku) = "ACAD2012" ?> 
    <Property Id="ACADREG" Value="ACAD-A001:409" /> 
<?else?> 
    <Property Id="ACADREG" Value="ACAD-A004:409" /> 
<?endif ?> 

O aún mejor, la mejor práctica es la búsqueda de ambos, por lo que más adelante se condicionalmente podría comprobar la existencia o el contenido de cada propiedad:

<Property Id="ACADROAMROOTDIR"> 
    <RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\R18.2\ACAD-A001:409" Name="RoamableRootFolder" /> 
</Property> 
<Property Id="ACADROAMARCHROOTDIR"> 
    <RegistrySearch Id="ARCHROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\R18.2\ACAD-A004:409" Name="RoamableRootFolder" /> 
</Property> 
+0

Parece que todavía estaría creando dos paquetes .msi separados. Quiero crear un archivo .msi que se adapte a las dos versiones de AutoCAD. – Robert

+0

No exactamente, pero solo te obliga a mantener estas propiedades. Creo que no deberías complicar demasiado. He actualizado mi respuesta de acuerdo con mi comprensión de tu requerimiento. – KMoraz

+0

Esto realmente no es lo que estaba buscando. Actualicé mi publicación con el aspecto de mi código. – Robert

0

Parece que quiere redefinir la propiedad si se define AutoCAD Arch 2012; de lo contrario, use Autocad 2012. Tuve un problema similar y utilicé la solución que encontré en este SO question

<Property Id="ACADREG" Value="ACAD-A001:409" /> <!-- Autocad 2012--> 
<Property Id="ACADREG_ARCH" Value="ACAD-A004:409" /> <!--Autocad Arch 2012--> 


<Property Id="ACADROAMDIR"> 
<RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="RoamableRootFolder" /> 
</Property> 

<Property Id="ACADROAMDIR_ARCH"> 
<RegistrySearch Id="ROAMROOTDIR" Root="HKCU" Type="raw" Key="Software\Autodesk\AutoCAD\[ACADVER]\[ACADREG_ARCH]" Name="RoamableRootFolder" /> 
</Property> 

<Property Id="ACADDIR"> 
<RegistrySearch Id="AcadLocRegistry" Type="raw" Root="HKLM" Key="SOFTWARE\Autodesk\AutoCAD\[ACADVER]\[ACADREG]" Name="AcadLocation" /> 
</Property> 

<Property Id="ACADDIR_ARCH"> 
<RegistrySearch Id="AcadLocRegistry" Type="raw" Root="HKLM" Key="SOFTWARE\Autodesk\AutoCAD\[ACADVER]\[ACADREG_ARCH]" Name="AcadLocation" /> 
</Property> 

<SetProperty Id="ACADROAMDIR" After="AppSearch" Value="[ACADROAMDIR_ARCH]"> 
ACADROAMDIR_ARCH 
</SetProperty> 

<SetProperty Id="ACADDIR" After="AppSearch" Value="[ACADDIR_ARCH]"> 
ACADDIR_ARCH 
</SetProperty> 

Después de eso, las propiedades que desea será correctamente estar en ACADDIR y ACADROAMDIR

Cuestiones relacionadas