2016-09-28 43 views
0

设定我有要根据属性值被选择或取消选择的特征属性值:条件内部功能会忽略在自定义动作

<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的值int * .wxs文件,并且条件按预期工作。任何想法为什么改变它在自定义操作不起作用?

+0

您检查安装日志文件?在功能选择之前是否调用自定义操作?日志文件应该指出所有属性更改的顺序和值。 –

+0

是的,该属性的值是正确的 – eddyuk

回答

1

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

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

这是更常见的在我看来,在这些情况下,有一个DoAction ControlEvent资料。对话框事件可以在所需功能上执行ADDLOCAL,在另一个上执行删除操作。自定义操作可以通过正在安装的功能的特征条件触发,例如& FeatureName = 3。这里有一个例子:

How to set the list of features which will be installed if the button was pushed?

+0

实际上,它不是发生在顺序自定义操作中,而是发生在对话框之间的转换中。有一个自定义动作是在点击按钮时触发的,在该自定义动作中,如果功能应该是1或3级,则存在逻辑 – eddyuk

+0

如果在CostFinalize之后,则会出现问题。 – PhilDW