默认情况下,将子功能设置为不安装

时间:2012-09-19 21:29:27

标签: wix installer windows-installer

我有一个带有功能和两个子功能的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吗?

3 个答案:

答案 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>