7

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

4

3 回答 3

12

INSTALLLEVEL属性就像一个高水位线。如果您将其设置为 1000 并且您不希望默认选择某个功能,则必须将该功能的级别设置为 1001 或更高。它是默认安装的级别或级别以下的所有内容。

来自 MSDN:

INSTALLLEVEL 属性是在默认情况下选择“打开”功能进行安装的初始级别。仅当 Feature 表的 Level 字段中的值小于或等于当前 INSTALLLEVEL 值时,才会安装功能。任何安装的安装级别由 INSTALLLEVEL 属性指定,可以是 1 到 32,767 的整数。有关安装级别的进一步讨论,请参阅功能表

于 2012-09-19T22:56:52.220 回答
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>
于 2012-09-20T11:24:37.907 回答
2

我认为您的问题在于在执行 UISequence 时覆盖 INSTALLLEVEL 属性的值。添加代码

<Property Id="INSTALLLEVEL" Value=3 />

在安装过程的最开始初始化属性值。但是当您从一个对话框移动到另一个对话框时,INSTALLLEVEL 属性可能会在您看到 FeathreTree 对话框之前发生变化。请验证“属性值已更改”的详细日志条目以及日志文件末尾的 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>
于 2012-09-20T11:12:01.063 回答