将功能关联到 WiX 中的复选框
Associate Feature to Checkbox in WiX
我的 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>
在另一个对话框中,我有几个用于“全部”、“应用程序”和“数据库”选项的复选框,每个都代表一个功能(“全部”表示应用程序和数据库)。我想将 App 复选框关联到 App
功能和数据库复选框到数据库功能。我使用 Event="AddLocal" 和 Value="AppFeature" 在该对话框的 Next 按钮中使用 Publish 元素进行了尝试,其中一个用于 DBFeature,并适当地选中了复选框值。但是在点击 Next 按钮时,没有任何反应。谁能帮帮我吗?我也在对话框中提供了元素以供参考。
<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="&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="&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>
为此,我参考了下面的 link,但无法正常工作。非常感谢任何帮助。
Wix 3.5, Install features based on checkboxes
试试这个:
在你的孩子未来把它放在 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>
我改变了方法。实际上有2种方法。一种是在Product.wxs内做特征元素要有条件。另一个提供更好的控制。下面的标记对此进行了解释。
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="&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。添加后,它开始工作并单击“下一步”按钮,将我带到下一个对话框。
我的 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>
在另一个对话框中,我有几个用于“全部”、“应用程序”和“数据库”选项的复选框,每个都代表一个功能(“全部”表示应用程序和数据库)。我想将 App 复选框关联到 App 功能和数据库复选框到数据库功能。我使用 Event="AddLocal" 和 Value="AppFeature" 在该对话框的 Next 按钮中使用 Publish 元素进行了尝试,其中一个用于 DBFeature,并适当地选中了复选框值。但是在点击 Next 按钮时,没有任何反应。谁能帮帮我吗?我也在对话框中提供了元素以供参考。
<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="&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="&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>
为此,我参考了下面的 link,但无法正常工作。非常感谢任何帮助。
Wix 3.5, Install features based on checkboxes
试试这个:
在你的孩子未来把它放在 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>
我改变了方法。实际上有2种方法。一种是在Product.wxs内做特征元素要有条件。另一个提供更好的控制。下面的标记对此进行了解释。
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="&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。添加后,它开始工作并单击“下一步”按钮,将我带到下一个对话框。