Feature中的条件忽略自定义操作中设置的属性值



我想根据属性值选择或取消选择一个特性:

<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,Feature Level总是1。出于调试目的,我停止触发自定义操作,并手动将PROP_IS_FIRST_INSTALLATION的值更改为*。WXS文件,条件按预期工作。你知道为什么在自定义动作中改变它不工作吗?

检查这些调用发生的顺序,因为特性中的条件是在CostFinalize操作期间评估的,所以您的自定义操作必须在CostFinalize之前。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa368014 (v = vs.85) . aspx

在我看来,在这些情况下使用DoAction controllevent更常见。对话框事件可以对所需的特性执行ADDLOCAL操作,对其他特性执行remove操作。然后可以通过正在安装的特性的特性条件触发自定义操作,例如&FeatureName=3。这里有一个例子:

如何设置按下按钮后将安装的功能列表?

最新更新