私は単純な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 (&core = "3")</Condition>
<ComponentRef Id='cpp_perf' />
</Feature>
ただし、ユーザーが機能コアを選択した場合、これは機能core_perfをインストールしません。
どうすればこれを修正できますか?
条件をコンポーネント定義に移動し、!を使用する必要があります。 &(機能アクション)の代わりに(機能状態)を使用して、インストールを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>
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>