首页 > 解决方案 > 如何为 Wix Bundle Log Element 设置自定义值?

问题描述

如果我输入一个硬编码的值,它可以正常工作

<Log PathVariable="C:\myProjectDir\myLogs\log.txt"/>

 

但是如果我创建一个单独的变量并替换硬代码,它就不起作用

<Log PathVariable="[LogLocation]"/>
<Variable Name="LogLocation" bal:Overridable="no" Type="string" Value="C:\myProjectDir\myLogs\log.txt" Persisted="yes"/>

 

我发现了一些东西,<WixVariable Id="WixBundleLog"/>但我真的不知道如何使用它。

我的最终目标是我有一个引导程序应用程序,我想更改创建我的 msi 和 exe 安装日志的位置

我能够使用更改变量元素值_bootstrapper.Engine.StringVariables["LogLocation"] = "C:\ProjectGorilla\logs\log.txt"

在 C# 中使用上述代码,变量 Id="LogLocation"已更改,但该更改未反映在Log 元素的 PathVariable

所以,我的问题是如何在 Log 元素的 PathVariable 属性中放置一个变量

提前致谢 :)

标签: variablesloggingpathwixbootstrapper

解决方案


根据文档,该PathVariable属性是:

将保存日志文件路径的变量的名称。空值将导致不设置变量。默认值为“WixBundleLog”。

PathVariable没有指定(捆绑)日志将被写入的路径。如果 BA 想要将文件复制到其他地方,它应该是一个变量。Burn 引擎从不读取此变量的值,因此在运行时更改它不会做任何事情。

在加载BootstrapperApplicationhttps://github.com/wixtoolset /wix3/blob/58abd6993afba08b39e37b0e76b1790161df9231/src/burn/engine/engine.cpp#L545)。BA没有办法改变路径。

今天,包(MSI、EXE 等)日志位置的工作方式与捆绑日志相同。但是,由于它们是在加载 BA 后创建的,因此理论上有人可以实现一个功能,以便 BA 可以更改其路径。


推荐阅读