You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wix3.11引导程序无需自定义UI如何实现MSI包可选安装?

实现结论

无需开发完全自定义的引导程序应用(BA),仅通过修改现有主题XML和Bundle配置即可实现该需求,Wix 3.11的标准引导程序(WixStdBA)原生支持复选框/单选框和Bundle变量的自动绑定。


具体操作步骤

1. 在Bundle中新增选择状态变量

在你现有InstallFolder变量定义下方,新增两个数字类型的持久化变量,用于存储用户的安装选择(默认值1代表默认勾选):

<Variable Name="InstallClassLibrary" Type="numeric" Value="1" Persisted="yes" />
<Variable Name="InstallConsoleApp" Type="numeric" Value="1" Persisted="yes" />

2. 为MSI包添加安装条件

修改两个MsiPackage节点,新增InstallCondition属性,仅当对应变量值为1时才执行该MSI的安装:

<Chain>
  <MsiPackage Id="ClassLibraryMsi"
               SourceFile="$(var.WixProjectForDemoClassLibrary.TargetDir)WixProjectForDemoClassLibrary.msi"
               DisplayName="Demo Class Library"
               Visible="yes"
               InstallCondition="InstallClassLibrary = 1">
    <MsiProperty Name="APPLICATIONFOLDER" Value="[InstallFolder]"/>
  </MsiPackage>
  <MsiPackage Id="ConsoleAppMsi"
              SourceFile="$(var.WixProjectForDemoConsoleApp.TargetDir)WixProjectForDemoConsoleApp.msi"
              DisplayName="Demo Console App"
              Visible="yes"
              InstallCondition="InstallConsoleApp = 1">
    <MsiProperty Name="APPLICATIONFOLDER" Value="[InstallFolder]" />
  </MsiPackage>
</Chain>

3. 修改主题XML添加选择控件

你可以选择在Options页面或者Install页面添加复选框,只需要保证复选框的Name属性和你前面定义的变量名完全一致,WixStdBA会自动同步用户选择到变量中。以下是添加到Options页面的示例:

  • 先调整窗口高度,避免控件溢出:把Window节点的Height从320改为380
  • 调整原有路径选择控件的Y坐标,在中间插入两个复选框:
<Page Name="Options">
  <Text X="141" Y="20" Width="-11" Height="30" FontId="2">#(loc.OptionsHeader)</Text>
  <!-- 新增两个选择复选框 -->
  <Checkbox Name="InstallClassLibrary" X="141" Y="61" Width="300" Height="17" TabStop="yes" FontId="3">安装Demo Class Library</Checkbox>
  <Checkbox Name="InstallConsoleApp" X="141" Y="85" Width="300" Height="17" TabStop="yes" FontId="3">安装Demo Console App</Checkbox>
  <!-- 原有路径选择控件向下偏移,避免重叠 -->
  <Text X="141" Y="115" Width="-11" Height="17" FontId="3">#(loc.OptionsLocationLabel)</Text>
  <Editbox Name="FolderEditbox" X="141" Y="140" Width="-91" Height="21" TabStop="yes" FontId="3" FileSystemAutoComplete="yes" />
  <Button Name="BrowseButton" X="-11" Y="140" Width="75" Height="23" TabStop="yes" FontId="3">#(loc.OptionsBrowseButton)</Button>
  <Button Name="OptionsOkButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.OptionsOkButton)</Button>
  <Button Name="OptionsCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.OptionsCancelButton)</Button>
</Page>

补充说明

如果你需要实现二选一的单选逻辑,只需要把两个复选框替换为RadioButton控件,绑定同一个数字变量即可,无需额外代码。

内容的提问来源于stack exchange,提问作者Priom Biswas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 20:09:02