web-dev-qa-db-ja.com

WiXの機能で条件を使用するにはどうすればよいですか?

私は単純なWindowsを統合しようとしていますが、これに対処する方法がわかりません。私には2つの機能があります-feature1とfeature2です。ユーザーがfeature1をインストールすることを選択した場合にのみ、feature2をインストールしたい。だから私は試しました:

<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をインストールしません。

どうすればこれを修正できますか?

16
Tamara

条件をコンポーネント定義に移動し、!を使用する必要があります。 &(機能アクション)の代わりに(機能状態)を使用して、インストールを2回再実行して例を追加しようとしたときに機能するようにします。

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

Feature1をfeature2の親にすることを検討しましたか?その場合、feature1もインストールされない限り、feature2はインストールできません。条件は必要ありません。

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