我有一个带有功能和两个子功能的WIX安装。我希望该功能是必需的,并且两个子功能是可选的,但默认情况下不安装。这是我的功能树:
<Feature Id="A" Level="3" AllowAdvertise="no" TypicalDefault="install"
InstallDefault="local" Absent="disallow" >
<Feature Id="A1" Level="1" AllowAdvertise="no" />
<Feature Id="A2" Level="1" AllowAdvertise="no" />
</Feature>
我想添加:
<Property Id="INSTALLLEVEL" Value=3 />
将设置要安装的主要功能,并将子功能设置为不安装。情况并非如此;默认安装所有功能。
我正在使用 WixUI_FeatureTree 。我想知道这是否会搞乱 INSTALLLEVEL属性。
我正在尝试甚至可能吗?如何默认禁用这两个子功能?
编辑:有趣。我设置INSTALLLEVEL=1000
并再次尝试,所有功能仍设置为安装。 WixUI_FeatureTree可能会破坏INSTALLLEVEL
吗?
答案 0 :(得分:9)
INSTALLLEVEL property就像一个高水位。如果将其设置为1000并且您不希望默认选择某个功能,则必须将该功能的级别设置为1001或更高。它是默认安装级别或低于该级别的所有内容。
来自MSDN:
INSTALLLEVEL属性是功能的初始级别 默认选择“ON”进行安装。仅安装功能 如果Feature表的Level字段中的值小于或 等于当前的INSTALLLEVEL值。安装级别为 任何安装都由INSTALLLEVEL属性指定,并且可以 从1到32,767的积分。有关安装的进一步讨论 级别,请参阅Feature Table。
答案 1 :(得分:4)
再观察一次,可能更重要。
您的子功能具有Level =“1”,无论如何都会为任何有效的INSTALLLEVEL安装它们。如果您需要在默认情况下禁用它们,则应将其级别设置为更高级别。像这样:
<Feature Id="A" Level="3" AllowAdvertise="no" TypicalDefault="install"
InstallDefault="local" Absent="disallow" >
<Feature Id="A1" Level="10" AllowAdvertise="no" />
<Feature Id="A2" Level="10" AllowAdvertise="no" />
</Feature>
答案 2 :(得分:1)
我认为您的问题在于覆盖USTequence执行的INSTALLLEVEL属性的值。添加代码
<Property Id="INSTALLLEVEL" Value=3 />
在安装过程的最初阶段初始化属性值。但是当您从对话框移动到对话框时,INSTALLLEVEL属性可能会在您看到FeathreTree对话框之前发生更改。请验证日志文件末尾的“Propery value changed”的详细日志条目和INSTALLLEVEL属性的最终值。 您可能需要创建自定义操作以将INSTALLLEVEL设置为您需要的任何值。 示例可以在WIX源中找到:SetupType对话框正是这样:
<Control Id="TypicalButton" Type="PushButton" X="40" Y="65" Width="80"
Height="17" ToolTip="!(loc.SetupTypeDlgTypicalButtonTooltip)"
Default="yes" Text="!(loc.SetupTypeDlgTypicalButton)">
<Publish Property="WixUI_InstallMode" Value="InstallTypical">1</Publish>
<Publish Event="SetInstallLevel" Value="3">1</Publish>
</Control>