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

Sau*_*ack 7 installer windows-installer wix

我有一个带有功能和两个子功能的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>
Run Code Online (Sandbox Code Playgroud)

我想添加:

<Property Id="INSTALLLEVEL" Value=3 />
Run Code Online (Sandbox Code Playgroud)

将设置主要功能安装和子功能不安装.情况并非如此; 默认情况下安装所有功能.

我正在使用WixUI_FeatureTree.我想知道这是否会搞乱INSTALLLEVEL属性.

那么我正在尝试甚至可能吗?如何默认禁用这两个子功能?

编辑:有趣.我重新设置INSTALLLEVEL=1000并尝试了,所有功能仍然设置为安装.WixUI_FeatureTree会破坏INSTALLLEVEL吗?

Chr*_*ter 12

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

来自MSDN:

INSTALLLEVEL属性是默认情况下安装选项"ON"的初始级别.仅当Feature表的Level字段中的值小于或等于当前INSTALLLEVEL值时,才会安装该功能.任何安装的安装级别由INSTALLLEVEL属性指定,并且可以是1到32,767之间的整数.有关安装级别的进一步讨论,请参阅功能表.


Sas*_*sha 2

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

<Property Id="INSTALLLEVEL" Value=3 />
Run Code Online (Sandbox Code Playgroud)

在安装过程一开始就初始化属性值。但是,当您从一个对话框移动到另一个对话框时,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>
Run Code Online (Sandbox Code Playgroud)