WIX Bundle中ExePackage传递InstallFolder参数失效问题咨询
问题原因
变量替换失效是WiX Burn的变量规则导致的配置错误:
- WiX Burn引擎的变量严格区分大小写:你在Bundle节点下定义的变量名为
InstallFolder(I、F大写,其余字母小写),但在ExePackage的安装命令中引用的是全大写的[INSTALLFOLDER],Burn无法识别这个不存在的变量,会直接将其替换为空字符串,最终生成的参数就缺失了盘符前缀,和日志里显示的Target="\Analytics\Database"现象完全吻合。 - 你当前定义的
InstallFolder变量默认不允许外部参数覆盖,无法通过命令行传入自定义路径。
修复方案
- 修正变量定义,增加
Overridable="yes"属性允许外部传参覆盖默认值:
<Variable Name="InstallFolder" Type="string" Value="c:\$(var.Company)" Overridable="yes"/>
- 修正ExePackage安装命令中的变量引用,保证变量名和定义完全一致:
<ExePackage Id="Database.CLI.Attach" DisplayName="Attach database to the SqlLocalDb instance." SourceFile="$(var.SourceFile)" InstallCommand="attach Target="[InstallFolder]\$(var.Department)\$(var.ProductName)"" Vital="yes" Compressed="no" PerMachine="yes"> <!-- 原有ExitCode配置无需修改 --> </ExePackage>
静默安装传参说明
你提到的Database.Setup.exe InstallLocation=c:\temp命令不可用,注意两点:
- 传参的变量名必须和Bundle中定义的变量名完全大小写一致,你定义的变量是
InstallFolder,不是InstallLocation - 必须给变量配置
Overridable="yes"属性,否则Burn会忽略外部传入的同名参数,始终使用配置里写死的默认值
正确的静默安装自定义路径命令格式为:
Database.Setup.exe /quiet InstallFolder=c:\temp
内容的提问来源于stack exchange,提问作者Andries
相关产品推荐
相关产品推荐

