Comment définir ou obtenir tous les journaux dans une application d'amorçage personnalisée

Dans mon application personnalisée d'amorçage géré par Burn, je souhaite définir le répertoire de journaux par défaut du programme d'installation afin que les clients puissent facilement trouver les journaux d'installation. Si cela ne peut pas être fait, je voudrais un moyen approprié de copier les fichiers journaux après l'installation.

J'ai essayé sans succès de définir la variable WixBundleLog dans mon projet d'installation (à savoir Bundle.wxs) et dans mon application d'amorçage managé. De plus, mon application bootstrapper est suffisamment générique pour être utilisée avec une variété de produits/paquets d'installation, j'ai donc besoin d'une solution assez flexible pour définir/obtenir les journaux d'installation pour chaque paquet, sans coder en dur le nom du paquet dans mon application bootstrapper.

Il semble qu'il devrait y avoir un moyen de le faire sans forcer l'utilisateur à utiliser "-l" ou "-log" sur la ligne de commande.

0

1 Réponses

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.

Le programme d'amorçage de la gravure définit les variables de chaîne pour le journal du programme d'amorçage et les journaux du package d'installation. Je garde une trace de ces variables dans une liste. Donc, dans mon constructeur, j'ai quelque chose comme:

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 définit les variables de chaîne pour les fichiers journaux au format [WixBundleLog] _PackageId. Dans mon application bootstrapper lorsque l'événement PlanPackageComplete est déclenché, j'ai un gestionnaire d'événements qui inclut le code suivant pour ajouter les variables à ma liste.

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

À la fin de l'installation ou si mon programme d'amorçage rencontre une erreur, j'appelle la méthode suivante:

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
ajouté
Ne serait-il pas plus facile d'obtenir le chemin de WixBundleLog, puis obtenir le nom de fichier sans préfixe de ce chemin et répertoire de fichiers, plus tard nous pourrions obtenir tous les fichiers du répertoire commençant par le nom de fichier enregistré et les copier?
ajouté l'auteur Vladimir Arustamian, source