2009-07-21 11 views
14

Estoy tratando de hacer simple Windows intaller, y no sé cómo lidiar con esto. Tengo dos funciones: feature1 y feature2. Quiero que la característica2 se instale solo si el usuario seleccionó la característica1 para ser instalada. Así que probé:¿Cómo se usan las condiciones en las funciones de WiX?

<Feature Id='core' Title='Core' 
     Description='ØMQ 1.0.0 core functionality and C++ API' Level='1'> 
    <ComponentRef Id='Core_include' /> 
    <ComponentRef Id='Core_bin' /> 
    <ComponentRef Id='Core_lib' /> 
    <ComponentRef Id='Core_zmq' /> 
    <ComponentRef Id='cpp_bin' /> 
</Feature> 

<Feature Id='core_perf' Title='core_perf' Description='0MQ core perf' Level='999'> 
    <Condition Level="0">NOT (&amp;core = "3")</Condition> 
     <ComponentRef Id='cpp_perf' /> 
</Feature> 

Pero esto no instala la función core_perf si el usuario selecciona la característica principal.

¿Cómo puedo solucionar esto?

+0

Con el significado estricto de "solo si", suena como feature1 y feature2 son en realidad solo una característica. ¿Realmente quiere decir que feature2 solo debería estar disponible si feature1 está instalado? – Jared

+0

Sí, eso es correcto. Quiero que la característica 2 se instale SÓLO SI la función 1 está instalada. –

+0

Para explicar: mi aplicación tiene varias características diferentes y luego tengo una sección de ejemplo que muestra ejemplos del uso de estas funciones. Quiero si alguien elige "feature1" y presenta "examples" (consta de ejemplos de todas las características), luego quiero que se instale la función "feature1_examples". –

Respuesta

14

¡Necesita mover su condición a la definición de componente y utilizarla! (Estado de función) en lugar de & (acción de funciones) para que funcione cuando intenta agregar los ejemplos volviendo a ejecutar la instalación de un segundo tiempo:

<Component Id="example1"> 
    <Condition>!feature1 = 3</Condition> 
</Component> 

<Component Id="example2"> 
    <Condition>!feature2 = 3</Condition> 
</Component> 

<Feature Id="feature1"> 
</Feature> 

<Feature Id="feature2"> 
</Feature> 

<Feature Id="examples"> 
    <ComponentRef Id="example1" /> 
    <ComponentRef Id="example2" /> 
</Feature> 
+3

¿Dónde está esto documentado? Característica state =! y acción característica = &. – Cheeso

+10

http://msdn.microsoft.com/en-us/library/aa368012(VS.85).aspx http://www.tramontana.co.hu/wix/lesson6.php#6.2 – Jared

+0

Esto podría ser bueno con algunos componentes, pero difícil de administrar si tiene una gran cantidad de Componentes. –

6

Creo que sería mejor si feature1 eran los padres de feature2. Entonces feature2 no se puede instalar a menos que feature1 también se instalará. Ninguna condición necesaria

<Feature Id='core' Title='Core' 
     Description='ØMQ 1.0.0 core functionality and C++ API' Level='1'> 
    <ComponentRef Id='Core_include' /> 
    <ComponentRef Id='Core_bin' /> 
    <ComponentRef Id='Core_lib' /> 
    <ComponentRef Id='Core_zmq' /> 
    <ComponentRef Id='cpp_bin' /> 
    <Feature Id='core_perf' Title='core_perf' Description='0MQ core perf' 
      Level='999'> 
     <ComponentRef Id='cpp_perf' /> 
    </Feature> 
</Feature> 
Cuestiones relacionadas