I found that this solves my problem. In order to do what I intended, I needed to create a checkbox for each individual function.
<Control Id="FeatureX" Type="CheckBox" X="191" Y="50" Width="140" Height="17" Property="FEATUREX_CHECKED" CheckBoxValue="myValue" Text="Install feature 1" /> <Control Id="FeatureY" Type="CheckBox" X="191" Y="67" Width="140" Height="17" Property="FEATUREY_CHECKED" CheckBoxValue="myValue" Text="Install feature 1" /> <Control Id="FeatureZ" Type="CheckBox" X="191" Y="84" Width="140" Height="17" Property="FEATUREZ_CHECKED" CheckBoxValue="myValue" Text="Install feature 1" />
Now, as soon as I did this, I added a publication to each of them and made a condition that made it so that only if this box is checked, this function will be installed. For example:
<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>
Note:
Delete is used to deselect everything starting from the installation (I was informed that as soon as the user interface is called, it is too late to change the levels of functions).
Then each function checks to see if the corresponding flag has been selected, and if this adds it to the AddLocal property. AddLocal will look like this if you look at it:
ADDLOCAL=FeatureX,FeatureY,FeatureZ...
The last thing I needed to do to get this to work was to check my main.wxs too to make sure that FeatureID is used in the checkboxes corresponding to the ComponentGroupRefID used:
<ComponentGroupRef Id="FeatureX"/>
So, here it is ... I again thank everyone for their help in this. If anyone reading this is embarrassed by anything, please feel free to email me and I will do my best to explain things a bit further.
Jimmy
source share