WixBundleLog是指定日志文件的刻录变量。无法在包中覆盖它,因为您无法在包含“Wix”前缀的包中设置变量。在引导程序应用程序中覆盖它也不起作用,因为引导程序继续记录到其默认值。
烧录引导程序为引导程序日志和安装包日志设置字符串变量。我在列表中跟踪这些变量。所以在我的构造函数中,我有类似的东西:
this.LogsDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), @"Company_Name\Logs\Installer\", DateTime.Now.ToString("yyyyMMdd_hhmmss"));
_logVariables = new List<string>();
_logVariables.Add("WixBundleLog");
Burn 以 [WixBundleLog]_PackageId 格式为日志文件设置字符串变量。在触发PlanPackageComplete事件时,在我的引导程序应用程序中,我有一个事件处理程序,其中包含以下代码以将变量添加到我的列表中。
//set *possible* log variables for a given package
_logVariables.Add("WixBundleLog_" + e.PackageId);
_logVariables.Add("WixBundleRollbackLog_" + e.PackageId);
在安装结束或我的引导程序遇到错误时,我调用以下方法:
private void CopyLogs()
{
if (!Directory.Exists(this.LogsDirectory))
Directory.CreateDirectory(this.LogsDirectory);
foreach (string logVariable in _logVariables)
{
if (this.Bootstrapper.Engine.StringVariables.Contains(logVariable))
{
string file = this.Bootstrapper.Engine.StringVariables[logVariable];
if (File.Exists(file))
{
FileInfo fileInfo = new FileInfo(file);
fileInfo.CopyTo(Path.Combine(this.LogsDirectory, fileInfo.Name), false);
}
}
}
}