Eu verifiquei isso novamente e aqui estão algumas informações atualizadas :
É possível suprimir a GUI do MSI e definir uma GUI externa implementada por um terceiro. Essa GUI externa é capaz de receber mensagens do msiexec.exe enquanto realiza a instalação. Isso é principalmente para implementar uma barra de progresso personalizada , mas parece que você também pode interceptar a maioria das outras mensagens de erro e mensagens de status: MsiSetExternalUI function .
O parâmetro interessante é o dwMessageFilter . Ao definir isso, você pode, por exemplo, receber apenas as mensagens de erro que ocorrem durante a instalação - ou assim parece. Suponho que isso seja suficiente para a maioria dos propósitos.
INSTALLUI_HANDLER MsiSetExternalUI(
_In_ INSTALLUI_HANDLER puiHandler,
_In_ DWORD dwMessageFilter,
_In_ LPVOID pvContext
);
Lamentavelmente não tenho código de exemplo para isso no momento. Vou testar isso mais tarde, quando eu configurar meu sistema corretamente. A função MsiEnableLog é uma relação chamada de função que ativará o registro no arquivo. Atualização: Veja o que parece um exemplo de SDK em funcionamento .
No nível da interface de linha de comando , você também pode definir o registro para liberar seu buffer imediatamente para o arquivo, adicionando o parâmetro ! :
msiexec.exe /I "IsWiX.msi" /QN /L*V! "C:\msilog.log"
Isso significa que o arquivo de log é gravado continuamente para que nenhum buffer de log seja perdido se o msiexec.exe falhar. O custo é um instalador significativamente mais lento devido à sobrecarga de IO.