2009-07-21 7 views
14

J'essaye de rendre Windows intaller simple, et je ne sais pas comment traiter ceci. J'ai deux caractéristiques - feature1 et feature2. Je veux que feature2 soit installé seulement si l'utilisateur a choisi feature1 pour être installé. J'ai donc essayé:Comment utiliser les conditions dans les fonctionnalités 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> 

Mais cela n'installe pas la fonction core_perf si l'utilisateur sélectionne le cœur de la fonction.

Comment puis-je résoudre ce problème?

+0

Au sens strict du terme "only if", cela ressemble à feature1 et feature2. Voulez-vous vraiment dire que feature2 ne devrait être disponible que si feature1 est installé? – Jared

+0

Oui, c'est vrai. Je veux que feature2 soit installé UNIQUEMENT SI feature1 est installé. –

+0

Pour expliquer - mon application a plusieurs fonctionnalités différentes, puis j'ai un exemple de section montrant des exemples d'utilisation de ces fonctionnalités. Je veux que quelqu'un choisisse "feature1" et propose "examples" (constitué d'exemples de toutes les fonctionnalités), alors je veux que la fonctionnalité "feature1_examples" soit installée. –

Répondre

14

Vous devez déplacer votre condition dans la définition de votre composant et utiliser! (État de fonction) au lieu de & (action Feature) pour qu'il fonctionne lorsque vous essayez d'ajouter les exemples en relançant l'installation d'une deuxième fois:

<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

Où est-ce documenté? Etat de la fonction =! et Action de la fonction = &. – 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

Cela pourrait être bon avec certains composants, mais difficile à gérer si vous avez un grand nombre de composants. –

6

Je pense que ce serait mieux si feature1 étaient les parents de feature2. Ensuite, feature2 ne peut pas être installé à moins que feature1 ne soit également installé. Aucune condition nécessaire.

<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> 
Questions connexes