How to set or get all logs in a custom bootstrapper application

后端 未结 1 922
既然无缘
既然无缘 2021-01-05 19:04

In my custom Burn managed bootstrapper application, I want a way to set the default log directory of the installer so that customers can easily find the installation logs. I

1条回答
  •  栀梦
    栀梦 (楼主)
    2021-01-05 19:34

    WixBundleLog is the burn variable that specifies the log file. It is not possible to override it in the bundle because you cannot set a variable in a bundle that contains the "Wix" prefix. Overriding it in the bootstrapper application doesn't work either because the bootstrapper continues to log to its default.

    The burn bootstrapper sets string variables for the bootstrapper log and the installation package logs. I keep track of these variables in a list. So in my constructor I have something like:

    this.LogsDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), @"Company_Name\Logs\Installer\", DateTime.Now.ToString("yyyyMMdd_hhmmss"));
    _logVariables = new List();
    _logVariables.Add("WixBundleLog");
    

    Burn sets string variables for the log files in the format [WixBundleLog]_PackageId. In my bootstrapper application when the PlanPackageComplete event is fired, I have an event handler that includes the following code to add the variables to my list.

    //set *possible* log variables for a given package
    _logVariables.Add("WixBundleLog_" + e.PackageId);
    _logVariables.Add("WixBundleRollbackLog_" + e.PackageId);
    

    At the end of installation or if my bootstrapper encounters an error, I call the following method:

    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);
                 }
             }
         }
     }
    

    0 讨论(0)
提交回复
热议问题