Как использовать условия в функциях в WiX? - PullRequest
16 голосов
/ 21 июля 2009

Я пытаюсь сделать простой инсталлятор Windows, и я не знаю, как с этим справиться. У меня есть две функции - Feature1 и Feature2. Я хочу, чтобы feature2 был установлен, только если пользователь выбрал feature1 для установки. Итак, я попробовал:

<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 не устанавливается, если пользователь выбирает базовое ядро.

Как я могу это исправить?

Ответы [ 2 ]

14 голосов
/ 21 июля 2009

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

<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>
6 голосов
/ 10 января 2013

Рассматривали ли вы вопрос о том, чтобы сделать feature1 родителем feature2? Тогда Feature2 не может быть установлен, если не будет также установлена ​​Feature1. Никаких условий не требуется.

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