2012-05-24 2 views
3

В моем настраиваемом загрузочном загрузочном загрузочном приложении я хочу, чтобы установить каталог журнала по умолчанию для установщика, чтобы клиенты могли легко находить журналы установки. Если этого не может быть сделано, я бы хотел, чтобы был подходящий способ скопировать файлы журнала после установки.Как установить или получить все журналы в пользовательском загрузочном приложении

Я безуспешно пытался установить переменную WixBundleLog в моем проекте настройки (т. Е. Bundle.wxs) и в моем управляемом загрузочном приложении. Кроме того, мое приложение для начальной загрузки является достаточно общим, поэтому его можно использовать с различными продуктами/пакетами установки, поэтому мне нужно решение, достаточно гибкое, чтобы устанавливать/получать журналы установки для каждого пакета без жесткого кодирования имени пакета в моем загрузочном приложении.

Кажется, что должен быть способ сделать это, не заставляя пользователя использовать «-l» или «-log» в командной строке.

ответ

10

WixBundleLog - это переменная сжигания, определяющая файл журнала. Невозможно переопределить его в пакете, потому что вы не можете установить переменную в комплекте, который содержит префикс «Wix». Переопределение его в приложении bootstrapper не работает либо потому, что bootstrapper продолжает регистрироваться по умолчанию.

Загрузочный загрузчик устанавливает строковые переменные для журнала начальной загрузки и журналов установочного пакета. Я отслеживаю эти переменные в списке. Так что в моем конструкторе у меня есть что-то вроде:

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

Ожог задает строковые переменные для файлов войти в формате [WixBundleLog] _PackageId. В моем приложении bootstrapper, когда событие 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); 
      } 
     } 
    } 
} 
+0

Не было бы легче получить путь к журналу назначения из WixBundleLog, а затем получить имя файла без префикса из этого пути и каталога файлов, позже мы могли бы просто получить все файлы в каталоге, который начинается с сохраненного имени файла и скопировать их? –

Смежные вопросы