Транзакция установщика с ExternalUI уничтожает мои файлы журнала - PullRequest
1 голос
/ 15 февраля 2011

Странное поведение с установочной транзакцией и ExternalUI, которые уничтожают мои файлы журнала.

Я объединяю три MSI в этой транзакции.Я делаю подробный файл журнала для каждой установки.В конце концов мой «последний» подробный журнал будет удален.Это всегда «последний», который.

Что я делаю не так?Как избежать этого поведения?

Это происходит после того, как я фиксирую транзакцию

transaction.Commit();

Именно здесь:

 private void End(bool commit)
 {
     uint ret = NativeMethods.MsiEndTransaction(commit ? 1 : 0);
 }

Мой последний файл журнала будет удален и заменен этимвыстрелил один:

=== Verbose logging started: 15.02.2011  10:58:16  Build type: SHIP UNICODE 5.00.7600.00  Calling process: \\olli\Public\Hin und her\Kai-Uwe\InstallWizard.exe ===
MSI (s) (08:30) [10:58:16:631]: User policy value 'DisableRollback' is 0
MSI (s) (08:30) [10:58:16:631]: Machine policy value 'DisableRollback' is 0
MSI (s) (08:30) [10:58:16:631]: Incrementing counter to disable shutdown. Counter after increment: 0
MSI (s) (08:30) [10:58:16:631]: MSCOREE not loaded loading copy from system32
MSI (s) (08:30) [10:58:16:959]: Note: 1: 2318 2:  
MSI (s) (08:30) [10:58:16:975]: Note: 1: 2318 2:  
MSI (s) (08:30) [10:58:16:975]: Note: 1: 2318 2:  
MSI (s) (08:30) [10:58:16:975]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied.  Counter after decrement: -1
MSI (s) (08:30) [10:58:16:990]: Restoring environment variables
MSI (s) (08:30) [10:58:16:990]: Calling SRSetRestorePoint API. dwRestorePtType: 0, dwEventType: 103, llSequenceNumber: 12, szDescription: "".
MSI (c) (E0:0C) [10:58:16:990]: Cloaking enabled.
MSI (s) (08:30) [10:58:16:990]: The call to SRSetRestorePoint API succeeded. Returned status: 0.
MSI (c) (E0:0C) [10:58:16:990]: Attempting to enable all disabled privileges before calling Install on Server

Из моего класса:

using (Transaction transaction = new Transaction("Install", TransactionAttributes.None))

foreach (MsiPackage package in _availableMsiPackages.Values){

  Installer.EnableLog(InstallLogModes.Verbose, LogPath);
  Installer.SetInternalUI(InstallUIOptions.Silent);
  ExternalUIRecordHandler _processMessageHandler = new ExternalUIRecordHandler ProcessMessage);
  ExternalUIRecordHandler result = Installer.SetExternalUI(_processMessageHandler, InstallLogModes.Verbose);

  Installer.InstallProduct(fi.FullName, _commandLine);
}

transaction.Commit();

1 Ответ

1 голос
/ 15 февраля 2011

Вы пытались вызвать четырехпараметрическую версию EnableLog ()?В этой версии третий параметр позволяет перевести его в режим добавления, а четвертый включает сброс.Я предполагаю, что режим not append применяется для повторного открытия файла журнала во время Commit ().Если вы все еще хотите усечь в начале, вы можете удалить любой существующий файл перед началом установки.

Installer.EnableLog(InstallLogModes.Verbose, LogPath, true, true);
...