我有一个功能,我想根据属性值选择或取消选择:
<Feature Id="featHAService" Title="!(loc.HAService)" AllowAdvertise="no" Level="1">
<Condition Level="3">
<![CDATA[PROP_IS_FIRST_INSTALLATION="0"]]>
</Condition>
</Feature>
在C#自定义操作中,在显示包含功能树的CustomizeSetup对话框之前,我根据某些逻辑设置PROP_IS_FIRST_INSTALLATION,无论值是0还是1,功能级别始终为1.出于调试目的,我停止了触发自定义操作并手动将PROP_IS_FIRST_INSTALLATION的值更改为* .wxs文件,并且条件按预期工作。知道为什么在自定义操作中更改它不起作用吗?
答案 0 :(得分:1)
检查发生这些调用的顺序,因为在CostFinalize操作期间评估要素中的条件,因此您的自定义操作必须在CostFinalize之前。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa368014(v=vs.85).aspx
在我看来,在这些情况下有一个DoAction controlEvent更常见。对话框事件可以在所需功能上执行ADDLOCAL,在另一个功能上执行删除操作。然后,可以通过正在安装的功能上的功能条件触发自定义操作,例如&amp; FeatureName = 3。这里有一个例子:
How to set the list of features which will be installed if the button was pushed?