Cum să setați sau să obțineți toate jurnalele într-o aplicație de bootstrapper personalizată

În aplicația mea personalizată Burn managed bootstrapper, vreau o modalitate de a seta directorul implicit al jurnalului de instalare, astfel încât clienții să poată găsi cu ușurință jurnalele de instalare. Dacă nu se poate face acest lucru, mi-ar plăcea o modalitate adecvată de a copia fișierele de jurnal după instalare.

Am încercat fără succes la setarea variabilei WixBundleLog în proiectul de configurare (adică Bundle.wxs) și în aplicația mea bootstrapper gestionată. De asemenea, aplicația mea de bootstrapper este destul de generică, astfel încât aceasta să fie utilizată cu o varietate de produse/pachete de instalare, așa că am nevoie de o soluție suficient de flexibilă pentru a seta/obține jurnalele de instalare pentru fiecare pachet, fără a codifica greșit numele pachetului în aplicația mea de bootstrapper.

Se pare că ar trebui să existe o modalitate de a face acest lucru fără a forța utilizatorul să folosească "-l" sau "-log" pe linia de comandă.

0

1 răspunsuri

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.

Bootstrapperul pentru arsuri stabilește variabilele șir pentru jurnalul de bootstrapper și jurnalele de pachete de instalare. Urmărim aceste variabile într-o listă. Deci, în constructorul meu am ceva de genul:

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 stabilește variabilele șir pentru fișierele jurnal în formatul [WixBundleLog] _PackageId. În aplicația mea de bootstrapper când este declanșat evenimentul PlanPackageComplete , am un handler de evenimente care include următorul cod pentru a adăuga variabilele în lista mea.

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

La sfârșitul instalării sau dacă bootstrapper-ul meu întâlnește o eroare, sună următoarea metodă:

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
adăugat
Nu ar fi mai ușor să obțineți calea jurnalului de destinație din WixBundleLog, apoi să obțineți numele fișierului fără prefix din această cale și directorul de fișiere, mai târziu am putea obține toate fișierele din directorul care începe cu numele fișierului salvat și le copiați?
adăugat autor Vladimir Arustamian, sursa