Instalador de Wix: configuración de la propiedad de condición del componente al realizar una instalación de administrador MSIEXEC en la línea de comandos

Tenemos tres tipos / sabores de nuestro producto, pero solo un MSI escrito en WiX. Cuando construimos el instalador, pasamos el sabor a través de una constante definida:

Call MSBUILD.bat ..\MSIs\CoreProduct\OurProduct.sln /p:DefineConstants="FLAVOUR=%_Flavour%"

y la constante se configura en Visual Studio, en Build -> Definir variables de preprocesador como FLAVOR = 50. El proceso de construcción, pasa en valores 50, 200 o LITE como el sabor.

En el código WiX tenemos un montón de condiciones en nuestros componentes que le indican qué archivo instalar en función del sabor; p.ej

      <Component Id="cmp7F45920B1AA100729BAE37FC846B3FC5" Guid="*">
    <File Id="fil238A776D9294E14671E012472F9F7196"
          KeyPath="yes"
          Source="$(var.MenusPath)\ClientListView 200.r5m"  
    <Condition>$(var.FLAVOUR)=200</Condition>
  </Component>

      <Component Id="cmp8BFF42B232724DC4BA5B8F87994DEF21" Guid="*">
    <File Id="fil808D6428D67248DDB8CA65DBC5978283" 
          KeyPath="yes" 
          Source="$(var.MenusPath)\ClientListView Lite.r5m"
    <Condition>$(var.FLAVOUR)=LITE</Condition>
  </Component>

Entonces, el ejemplo anterior instalará un archivo llamado "ClientListView Lite.r5m" si el FLAVOR es LITE o instalará un archivo llamado "ClientListView 200.r5m" si el FLAVOR es 200.

¡Todo esto funciona como se esperaba y lo ha hecho durante años!

Pero ahora, tenemos una versión web de nuestro producto y necesitamos un archivo zip que contenga la estructura de carpetas y los archivos que se instalarían para cada versión. Descubrí que puedes ejecutar un msi en la línea de comando usando MSIEXEC y el argumento / a que luego redirigirá todo lo que se habría instalado en una carpeta y pensé que esto es exactamente lo que quiero ... pero, por desgracia, no funciona como yo Había esperado.

Lo que parece estar haciendo es ejecutar el MSI y extraer los archivos en la carpeta de destino, pero está ignorando el sabor y, por lo tanto, terminas con los archivos "ClientListView Lite.r5m" y "ClientListView 200.r5m" extraídos en la carpeta; que obviamente no es lo que quiero.

Al leer los documentos en MSIEXEC, parece que puede pasar el valor de una propiedad pública, por ejemplo msiexec.exe / a "C: \ Example.msi" MY_PROP = "myValue", por lo que pensé que esto podría ayudarme; así que en mi código WiX agregué la línea:

    <Property Id='PRODTYPE' Value="$(var.FLAVOUR)"/>

y luego alteré las condiciones de mi componente para que sea así:

  <Component Id="cmp7F45920B1AA100729BAE37FC846B3FC5" Guid="*">
    <File Id="fil238A776D9294E14671E012472F9F7196"
          KeyPath="yes"
          Source="$(var.MenusPath)\ClientListView 200.r5m"  
    <Condition><![CDATA[PRODTYPE=200]]></Condition>
  </Component>

  <Component Id="cmp8BFF42B232724DC4BA5B8F87994DEF21" Guid="*">
    <File Id="fil808D6428D67248DDB8CA65DBC5978283" 
          KeyPath="yes" 
          Source="$(var.MenusPath)\ClientListView Lite.r5m"
    <Condition><![CDATA[PRODTYPE=LITE]]></Condition>
  </Component>

pero aunque eso compiló bien, ejecutándolo a través de:

msiexec /a OurProduct.msi /qb PRODTYPE=200 TARGETDIR="C:\InstalledFiles200"

todavía extrae ambos archivos para los sabores 200 y LITE, donde solo quería el de 200.

Entonces, estoy tratando de hacer algo que no es posible ... o estoy haciendo algo mal, agradecería cualquier ayuda, porque la alternativa de imitar el proceso en un archivo por lotes para crear mi zip; será horrible !!

Salud,

Chris

Respuestas a la pregunta(3)

Su respuesta a la pregunta