如何在选择功能时禁用Wix组件?

时间:2011-10-07 10:27:46

标签: wix

在选择功能时,Wix很容易启用组件。我想做相反的事情,除非选择给定的功能,否则将安装组件。原因是如果选择了给定的特性,组件将执行不需要的配置更改。

实验失败:

我尝试在组件中使用条件:

<Component ...>
    <Condition>&Feature = 3</Condition>
    ...
</Component>

这不起作用,因为apparently the feature states are not calculated at the point where the component conditions are evaluated

我还尝试使用自定义操作集在CostFinalize之前运行,以便设置可在Component条件中测试的属性。这也行不通:

<Custom Action="Transfer_Feature_State" Before="CostFinalize" />
<Custom Action="Transfer_Feature_State_Property" Before="MtpWeb_Features_LabManager" />
<Custom Action="Transfer_Feature_State_Feature" Before="MtpWeb_Features_LabManager" />

当自定义操作运行时,功能状态仍设置为-1,因此在CostFinalize之前尚未计算功能状态。

有没有办法根据功能选择禁用组件?

1 个答案:

答案 0 :(得分:3)

组件被组织成功能。这意味着默认情况下会安装功能中的所有组件。如果您不想使用某项功能来安装组件,则可以确保该组件未包含在该功能中。

您真正想要的是互斥功能。基本上,只有在未安装其他功能且反之亦然的情况下,才能安装包含该组件的功能。

Windows Installer不支持此功能,因此只能使用自定义操作完成此操作。基本上,当选择给定功能时,您可以使用MsiSetFeatureState功能确保未安装包含组件的其他功能。