【问题标题】:Associate Feature to Checkbox in WiX将功能关联到 WiX 中的复选框
【发布时间】:2018-03-04 02:00:19
【问题描述】:

我的 Product.wxs 中有一些功能(Complete,它有 2 个子功能,即 AppFeature 和 DBFeature),如下所示。

 <Feature InstallDefault="local" Description="!(loc.FullFeatureDesc)" Title="!(loc.FullFeatureTitle)" Level="1" Id="Complete" Absent="allow" AllowAdvertise="no" Display="expand">
      <Feature InstallDefault="local" Description="!(loc.AppFeatureDesc)" Title="!(loc.AppFeatureTitle)" Level="1" Id="AppFeature" Absent="allow" AllowAdvertise="no" Display="expand">
        <ComponentGroupRef Id="AppCG"/>
      </Feature>
      <Feature InstallDefault="local" Description="!(loc.DBFeatureDesc)" Title="!(loc.DBFeatureTitle)" Level="1" Id="DBFeature" Absent="allow" AllowAdvertise="no" Display="expand">
        <ComponentGroupRef Id="DbCG"/>
      </Feature>
    </Feature>

在另一个对话框中,我有几个用于 All、App 和 DB 选项的复选框,每个选项都表示一个功能(All 表示 App 和 DB)。我想将 App 复选框关联到 App 功能和数据库复选框到数据库功能。我使用 Event="AddLocal" 和 Value="AppFeature" 和一个用于 DBFeature 的对话框中的 Next 按钮中的 Publish 元素进行了尝试,并适当地选中了复选框值。但是在单击下一步按钮时,什么也没有发生。谁能帮帮我吗?我还提供了对话框中的元素以供参考。

<Control Id="ControlAllFeature" Type="CheckBox" X="180" Y="33" Width="140" Height="17"
    Property="ALLFEATURES_CHECKED" CheckBoxValue="AllFeatureValue" Text="Install Everything">
          <Publish Property="APPFEATURE_CHECKED" Value="AppFeatureValue" Order="1">ALLFEATURES_CHECKED</Publish>
          <Publish Property="APPFEATURE_CHECKED" Value="{}" Order="2">NOT ALLFEATURES_CHECKED</Publish>
          <Publish Property="DBFEATURE_CHECKED" Value="DBFeatureValue" Order="3">ALLFEATURES_CHECKED</Publish>
          <Publish Property="DBFEATURE_CHECKED" Value="{}" Order="4">NOT ALLFEATURES_CHECKED</Publish>      
        </Control>
        <Control Id="ControlAppFeature" Type="CheckBox" X="191" Y="50" Width="140" Height="17"
     Property="APPFEATURE_CHECKED" CheckBoxValue="AppFeatureValue" Text="Install Application">
          <Publish Property="ALLFEATURES_CHECKED" Value="{}" Order="1">NOT APPFEATURE_CHECKED</Publish>
          <Publish Property="ALLFEATURES_CHECKED" Value="AllFeatureValue" Order="2">APPFEATURE_CHECKED AND DBFEATURE_CHECKED</Publish>
        </Control>
        <Control Id="ControlDBFeature" Type="CheckBox" X="191" Y="67" Width="140" Height="17"
           Property="DBFEATURE_CHECKED" CheckBoxValue="DBFeatureValue" Text="Install DB">
          <Publish Property="ALLFEATURES_CHECKED" Value="{}" Order="1">NOT DBFEATURE_CHECKED</Publish>
          <Publish Property="ALLFEATURES_CHECKED" Value="AllFeatureValue" Order="2">APPFEATURE_CHECKED AND DBFEATURE_CHECKED</Publish>
        </Control>

        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="&amp;Back">
          <Publish Event="NewDialog" Value="CustLicenseAgmtDlg">1</Publish>
        </Control>
        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="&amp;Next">
          <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
          <Publish Event="NewDialog" Value="BrowsePathDlg"></Publish>
           <Condition Action="disable">NOT APPFEATURE_CHECKED OR NOT DBFEATURE_CHECKED</Condition>
          <Condition Action="enable">APPFEATURE_CHECKED OR DBFEATURE_CHECKED</Condition>
         <Publish Event="Remove" Value="ALL" Order="1">1</Publish>
         <Publish Event="AddLocal" Value="AppFeature" Order="2">APPFEATURE_CHECKED</Publish>
         <Publish Event="AddLocal" Value="DBFeature" Order="3">DBFEATURE_CHECKED</Publish>
        </Control>
        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="Cancel">
          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
        </Control>

我为此参考了下面的链接,但无法使其正常工作。任何帮助将不胜感激。

Wix 3.5, Install features based on checkboxes

【问题讨论】:

    标签: checkbox dialog wix


    【解决方案1】:

    我改变了方法。实际上有2种方式。一种是在Product.wxs里面做特征元素要有条件。另一个提供更好的控制。下面的标记说明了这一点。

    <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="&amp;Next">
              <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
              <Publish Event="NewDialog" Value="BrowsePathDlg">1</Publish>
                 <Condition Action="disable">NOT APPFEATURE_CHECKED OR NOT DBFEATURE_CHECKED OR (((!AppFeature = 3) AND (!DBFeature = 2) AND NOT DBFEATURE_CHECKED) AND ((!DBFeature = 3) AND (!AppFeature = 2) AND NOT APPFEATURE_CHECKED)) OR ((!AppFeature = 3) AND (!DBFeature = 3))</Condition>
              <Condition Action="enable">(APPFEATURE_CHECKED OR DBFEATURE_CHECKED) AND (((!AppFeature = 2) AND APPFEATURE_CHECKED) OR ((!DBFeature = 2) AND DBFEATURE_CHECKED))</Condition>
               <Publish Event="AddLocal" Value="ALL">1</Publish> 
              <Publish Event="Remove" Value="AppFeature"><![CDATA[APPFEATURE_CHECKED <> "1"]]></Publish>
              <Publish Event="Remove" Value="DBFeature"><![CDATA[DBFEATURE_CHECKED <> "1"]]></Publish>
            </Control>
    

    我之前缺少的是 Publish NewDialog 事件中的值 1。添加后,它开始工作并单击“下一步”按钮,将我带到下一个对话框。

    【讨论】:

      【解决方案2】:

      试试这个:

      在您的 chield 功能中将其置于 0 级,然后他们在她内部设置一个条件以验证复选框是否被选中

      <Feature InstallDefault="local" Description="!(loc.FullFeatureDesc)" Title="!(loc.FullFeatureTitle)" Level="1" Id="Complete" Absent="allow" AllowAdvertise="no" Display="expand">
        <Feature InstallDefault="local" Description="!(loc.AppFeatureDesc)" Title="!(loc.AppFeatureTitle)" Level="0" Id="AppFeature" Absent="allow" AllowAdvertise="no" Display="expand">
          <ComponentGroupRef Id="AppCG"/><Condition Level="1">APPFEATURE_CHECKED</Condition>
        </Feature>
        <Feature InstallDefault="local" Description="!(loc.DBFeatureDesc)" Title="!(loc.DBFeatureTitle)" Level="1" Id="DBFeature" Absent="allow" AllowAdvertise="no" Display="expand">
          <ComponentGroupRef Id="DbCG"/>
        </Feature>
      </Feature>
      

      【讨论】:

        猜你喜欢
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 2011-03-11
        • 1970-01-01
        • 2011-09-09
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        相关资源
        最近更新 更多