Existe alguma maneira de fazer o msiexec ecoar para stdout em vez de logar em um arquivo

7

Como parte de um pipeline de entrega contínua, gostaria de instalar um msi em uma determinada máquina. msiexec plus psexec faz isso perfeitamente, mas parece que o msiexec só pode logar em um arquivo e eu preciso dele para logar no stdout / stderr.

Agora, para recuperar o resultado em nosso software de CI, terei que adicionar um segundo passo para fazer o eco do conteúdo do log, o que parece um pouco inútil.

Alguém já enfrentou essa questão antes (e a superou?)

Agradecemos antecipadamente por qualquer ajuda aqui.

Marcar

    
por mrmrcoleman 03.10.2012 / 21:30

3 respostas

5

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.

    
por 24.07.2014 / 19:16
3

MsiExec só pode logar em um arquivo, então você terá que manter o eco do conteúdo daquele arquivo depois que o instalador terminar.

    
por 04.10.2012 / 00:38
1

Eu prefiro armazenar em cache o arquivo de log MSI no sistema local permanentemente em um local comum para cada instalação e, em seguida, basta registrar o código de saída de toda a instalação. Se a configuração relata sucesso, o arquivo de log é bastante desinteressante? Apenas mais "barulho"?

Além disso, existem vários sistemas de entrega de software que irão capturar as informações de log para uma instalação do MSI e armazená-las centralmente. Um exemplo é o SCCM (Microsofts renomeado Systems Management Server - SMS).

Configurando o registro de todos os arquivos MSI, consulte a seção "Globalmente para todas as configurações em uma máquina": link

    
por 05.10.2012 / 04:48