好久没看这个了,不过现在好像没人了。我会尝试一下:我猜你正在使用预处理器变量在你的来源那里,而不是运行时变量。换句话说"$(var.VariableName)"
条目解决于构建时 (when your WiX Bundle is compiled - which is sometimes OK
)而不是在run-time (when your WiX Bundle is installed - which is often desired
).
换句话说,我假设你的预处理器变量决心
编译期间为空字符串,这就是您的安装的原因
不行。根本没有为所有预处理器字段指定任何值。
作为测试,也许可以使用一些硬编码值来编译您的包作为“冒烟测试”,以确定是否是这种情况。然后尝试Variable element如下面所描述的。
Mockup:
<ExePackage Id ="SQL_express" SourceFile="SQLEXPR_x64_ENU.exe" Compressed="yes" Vital="no" InstallCommand="/q /ACTION=Install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SQLSVCACCOUNT=TestAccount /SQLSYSADMINACCOUNTS=SqlAccount /AGTSVCACCOUNT=SvcAccount /IACCEPTSQLSERVERLICENSETERMS /SECURITYMODE=SQL /SAPWD=SAPassword" />
也许你可以看看尼尔·斯莱特霍姆的博客对于如何解决这个问题的一些想法(我没有完整的工作示例可以添加):http://neilsleightholm.blogspot.com/2012/05/wix-burn-tipstricks.html
我认为关键是Variable element:
<Variable Name="InstallFolder" Type="string" Value="[ProgramFilesFolder]ACME\My App" />
看起来您可以通过设置在命令行中覆盖这些值Overridable attribute to yes
(该链接的页面底部)。我从来没有尝试过这个。看起来这些变量元素使用标准 MSI-brace 约定进行解析:[InstallFolder]
。样本:
<MsiProperty Name="INSTALLLOCATION" Value="[InstallFolder]" />
再次查看 Sleightholm 的模板有关上述片段的完整上下文。您将使用ExePackage而不是MsiPackage明显地。
看来你可以忽略WixVariable element对于您的用例(而不是Variable element您将需要它)。