我找到了解决我问题的方法。要按照我的预期做,我需要为每个功能创建一个复选框。
<Control Id="FeatureX" Type="CheckBox" X="191" Y="50" Width="140" Height="17"
Property="FEATUREX_CHECKED" CheckBoxValue="myValue" Text="Install feature X" />
<Control Id="FeatureY" Type="CheckBox" X="191" Y="67" Width="140" Height="17"
Property="FEATUREY_CHECKED" CheckBoxValue="myValue" Text="Install feature Y" />
<Control Id="FeatureZ" Type="CheckBox" X="191" Y="84" Width="140" Height="17"
Property="FEATUREZ_CHECKED" CheckBoxValue="myValue" Text="Install feature Z" />
现在,一旦我这样做了,我就为每个发布添加了一个相应的发布,并设置了一个条件,以便只有选中该复选框才会安装该功能。像这样:
<Control Id="Next" Type="PushButton" Text="Next" X="254" Y="243" Height="17" Width="56">
<Publish Event="Remove" Value="ALL" Order="1">1</Publish>
<Publish Event="AddLocal" Value="FeatureX" Order="2">
<![CDATA[FEATUREX_CHECKED]]>
</Publish>
</Control>
注意:
Remove 用于取消选择安装中的所有内容(我注意到一旦调用 UI,更改功能级别为时已晚)。
然后检查每个功能以查看“相应的复选框”是否已被选中,如果是,则将其添加到“AddLocal”属性中。 AddLocal 看起来像这样:
ADDLOCAL=FeatureX, FeatureY, FeatureZ...
我需要做的最后一件事是检查我的 main.wxs 以确保复选框中使用的 FeatureID 与使用的 ComponentGroupRefID 匹配:
<ComponentGroupRef Id="FeatureX"/>
原来如此……
我再次感谢大家对此的帮助。如果有人读到这篇文章有什么困惑,请随时给我留言,我会尽力进一步解释。