Я проверил это снова, и вот некоторая обновленная информация :
Можно отключить графический интерфейс MSI и установить внешний графический интерфейс, реализованный третьей стороной. Этот внешний графический интерфейс может получать сообщения от msiexec.exe во время установки. Это в основном для реализации пользовательского индикатора выполнения , но, похоже, вы также можете перехватывать большинство других сообщений об ошибках и сообщений о состоянии: функция MsiSetExternalUI .
Интересным параметром является dwMessageFilter . Установив этот параметр, вы можете, например, получать только сообщения об ошибках, которые появляются во время установки - или так может показаться. Я полагаю, этого может быть достаточно для большинства целей.
INSTALLUI_HANDLER MsiSetExternalUI(
_In_ INSTALLUI_HANDLER puiHandler,
_In_ DWORD dwMessageFilter,
_In_ LPVOID pvContext
);
К сожалению, на данный момент у меня нет примера кода для этого. Я проверю это позже, когда правильно настрою свою систему. Функция MsiEnableLog - это вызов связанной функции, который включит запись в файл. Обновление: вот что выглядит как рабочий пример SDK .
На уровне интерфейса командной строки вы также можете настроить ведение журнала, чтобы немедленно очистить его буфер в файл, добавив ! параметр:
msiexec.exe /I "IsWiX.msi" /QN /L*V! "C:\msilog.log"
Это означает, что файл журнала записывается непрерывно, поэтому при сбое msiexec.exe буфер журнала не теряется. Стоимость установки значительно медленнее из-за накладных расходов ввода-вывода.