如何在Wix v4 Bundle的UI中添加创建桌面快捷方式复选框
在Wix v4 Bundle中添加“创建桌面快捷方式”复选框
WixStandardBootstrapperApplication(WSBA)的默认主题不支持直接添加自定义UI控件,你需要通过自定义WSBA主题+在Bundle与MSI间传递变量的方式实现这个功能,具体步骤如下:
步骤1:导出默认主题文件
使用Wix工具集的dark.exe导出rtfLargeLicense主题的源文件,用于后续修改:
dark.exe -theme rtfLargeLicense -out CustomTheme.wxl
(dark.exe位于Wix Toolset v4的安装目录,比如C:\Program Files (x86)\WiX Toolset v4\bin)
步骤2:修改自定义主题,添加复选框
打开导出的CustomTheme.wxl,找到InstallOptions页面(或在License页面末尾),插入一个绑定到自定义变量的CheckBox控件:
示例修改片段:
<!-- 在InstallOptions页面的现有控件后添加 --> <Control Id="CreateDesktopShortcutCheckbox" Type="CheckBox" X="10" Y="170" Width="300" Height="17" Property="CREATE_DESKTOP_SHORTCUT" CheckBoxValue="1" Text="Create Desktop Shortcut" />
注意变量名CREATE_DESKTOP_SHORTCUT需在后续步骤中保持一致。
步骤3:在Bundle中引用自定义主题并定义变量
修改bundle.wxs,替换WSBA的主题配置为自定义主题,并定义持久化变量:
修改后的BootstrapperApplication与变量定义部分:
<BootstrapperApplication> <bal:WixStandardBootstrapperApplication ThemeFile="CustomTheme.wxl" LogoFile="logo_installer.ico" LicenseFile="LicenseAgreement_en.rtf" LaunchTarget="C:\Program Files\My Application\myapplication.exe"/> </BootstrapperApplication> <!-- 在Bundle内添加变量定义 --> <Variable Name="CREATE_DESKTOP_SHORTCUT" Type="numeric" Value="1" Persisted="yes" />
Value="1"表示默认勾选复选框,Value="0"则默认不勾选Persisted="yes"确保安装时的选择会被保存
步骤4:将变量传递给MSI项目
在bundle.wxs的MsiPackage元素中,添加MsiProperty属性,把Bundle的变量传递给MSI:
<MsiPackage SourceFile="myapplication.msi" DisplayName="My Application"> <MsiProperty Name="CREATE_DESKTOP_SHORTCUT" Value="[CREATE_DESKTOP_SHORTCUT]" /> </MsiPackage>
步骤5:修改MSI项目,根据变量创建快捷方式
在你的MSI项目(如Product.wxs)中,先定义接收的属性,再给快捷方式组件添加条件判断:
- 定义属性:
<Property Id="CREATE_DESKTOP_SHORTCUT" Value="1" />
- 修改快捷方式组件:
<Component Id="ApplicationShortcut" Guid="YOUR-GUID-HERE" Directory="DesktopFolder"> <Shortcut Id="ApplicationDesktopShortcut" Name="My Application" Target="[INSTALLFOLDER]myapplication.exe" WorkingDirectory="INSTALLFOLDER" /> <Condition>CREATE_DESKTOP_SHORTCUT = 1</Condition> </Component>
只有当复选框被勾选(变量值为1)时,才会创建桌面快捷方式。
注意事项
- 确保
CustomTheme.wxl被包含在Bundle项目中,设置为内容并复制到输出目录 - 变量名在Bundle、主题、MSI中必须完全一致
- 如需多语言支持,可在主题文件中使用字符串资源代替硬编码文本
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

