如何将PROPERTY=VALUE从WiX引导程序传递至安装程序?
解决WiX引导程序传递自定义属性的问题
要让WiX引导程序(Burn)接收命令行传入的ENABLE_TOGGLE属性并传递给内部MSI,需按以下步骤配置:
1. 在Bundle中声明可覆盖的变量
引导程序不会自动识别命令行参数,必须显式定义对应变量并允许外部覆盖。在Bundle元素内添加:
<Variable Name="ENABLE_TOGGLE" Type="string" Value="0" bal:Overridable="yes" />
2. 添加Bal扩展命名空间
在Wix根元素中声明bal命名空间(Overridable属于Bal扩展特性):
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
3. 将变量映射到MSI属性
在<MsiPackage>内通过变量引用传递属性值:
<MsiPackage SourceFile="setup.msi"> <MsiProperty Name="ENABLE_TOGGLE" Value="[ENABLE_TOGGLE]" /> </MsiPackage>
4. 确保MSI中的属性配置正确
MSI内的ENABLE_TOGGLE必须是全大写的公共属性且已定义,比如在Product元素内添加:
<Property Id="ENABLE_TOGGLE" Value="0" />
5. 编译时链接Bal扩展
使用light.exe编译时需引用WixBalExtension.dll,命令行示例:
light.exe yourproject.wixobj -ext WixBalExtension -out bootstrapper.exe
关键说明
- 之前直接用
[ENABLE_TOGGLE]无效,是因为Bundle未定义该变量,引导程序无法自动将命令行参数传递给MSI,必须显式声明并标记为可覆盖。 - 命令行执行需注意格式:
bootstrapper.exe /q ENABLE_TOGGLE=1(若你的引导程序文件名是boostrapper.exe则保持原拼写)
内容的提问来源于stack exchange,提问作者fableal
相关产品推荐
相关产品推荐

