2009-07-21 3 views
14

Я пытаюсь сделать простой Windows intaller, и я не знаю, как с этим бороться. У меня есть две функции - feature1 и feature2. Я хочу, чтобы функция2 была установлена ​​только в том случае, если пользователь выбрал функцию1 для установки. Поэтому я попытался:Как использовать условия в функциях 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> 

Но это не устанавливает функцию core_perf, если пользователь выбирает ядро ​​функции.

Как это исправить?

+0

По строгом значении «только если» это звучит как feature1 и feature2, на самом деле это всего лишь одна особенность. Вы действительно имеете в виду, что функция feature2 должна быть доступна только в том случае, если установлена ​​функция1? – Jared

+0

Да, это так. Я хочу, чтобы функция2 была установлена ​​ТОЛЬКО, если установлена ​​функция feature1. – 2009-07-21 12:48:03

+0

Чтобы объяснить - мое приложение имеет несколько различных функций, а затем я приведу пример с примерами использования этих функций. Я хочу, чтобы кто-то выбирал «feature1» и показывал «примеры» (состоящий из примеров всех функций), тогда я хочу установить функцию «feature1_examples». – 2009-07-21 12:51:03

ответ

14

Вам необходимо перенести свое условие в свое определение компонента и использовать его! (Функция состояния) вместо & (Feature действия), так что это работает, когда вы пытаетесь добавить примеры путем повторного запуска установки во второй раз:

<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

Где это документировано? Состояние функции =! и Feature action = &. – 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

Это может быть хорошо с некоторыми компонентами, но трудно справиться, если у вас есть большое количество Компонентов. –

6

Я думаю, что было бы лучше, если feature1 были родителем функции2. Затем функция2 не может быть установлена, если не будет установлена ​​функция1. Не требуется никаких условий.

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