基于属性的条件特征

时间:2016-11-03 03:44:49

标签: wix windows-installer

在我的软件包中,我有2个功能,这两个功能都是基于属性值创建文件夹结构。你可以看到我的条件相当简单。有趣的是,只有特征ONE上的条件才有效,而在特征TWO中(它进行比较)它什么也没做,但是如果我在每个组件上添加条件就像在其他粘贴代码中一样,它可以正常工作。

我想知道为什么会发生这种情况

<Property Id="NUMBER" />


   <Feature Id="ONE" Level="0">
      <Condition Level="1">
        <![CDATA[NOT NUMBER]]>
      </Condition>
      <ComponentGroupRef Id="OneStructure"/>
    </Feature>

    <Feature Id="TWO" Level="0">
      <Condition Level="1">
        <![CDATA[NUMBER <> ""]]>
      </Condition>
      <ComponentGroupRef Id="OneStructure"/>
    </Feature>

-

                <Directory Id="dir77996843FCCE5E3734A5EDAA86FCE55B" Name="Input">
                    <Component Id="cmp2F4C23D858A887EF0B2539F7EC1884BE" Guid="{625D2714-157F-4B21-86C0-D4954A4E1F73}" KeyPath="yes">      <Condition>        <![CDATA[NUMBER <> ""]]> </Condition>
                        <CreateFolder />
                    </Component>
                </Directory>

1 个答案:

答案 0 :(得分:0)

有同样的问题。显然它只与被评估一次的条件有关。

您可以将条件放在与给定对话框中的按钮相关的控制事件中,而不是直接在条件中添加条件。

示例:

  <Control Id="Install" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="Install">
    <!--Check property value here:-->
    <Publish Event="AddLocal" Value="ALL">1</Publish>
    <Publish Event="Remove" Value="ONE">NUMBER = 0</Publish>
    <Publish Event="Remove" Value="TWO">NUMBER = 1</Publish>
    <Publish Event="EndDialog" Value="Return" />
  </Control>

然后,您可以使用单选按钮更改属性“NUMBER”的值。

希望这有帮助!