Como parte de um pipeline de entrega contínua, eu gostaria de instalar um msi em uma determinada máquina. O msiexec e o psexec fazem isso perfeitamente, mas parece que o msiexec só pode fazer logon em um arquivo e eu preciso que ele faça o log no stdout / stderr.
No momento, para recuperar a saída do software de CI, terei que adicionar uma segunda etapa para ecoar o conteúdo do log, o que parece um pouco inútil.
Alguém já enfrentou esse problema antes (e superou?)
Agradecemos antecipadamente por qualquer ajuda aqui.
Marca
Respostas:
Eu verifiquei isso novamente, e aqui estão algumas informações atualizadas :
É possível suprimir a GUI da MSI e definir uma GUI externa implementada por terceiros. Essa GUI externa pode receber mensagens do msiexec.exe enquanto executa 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 status: Função MsiSetExternalUI .
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 possa ser suficiente para a maioria dos propósitos.
Lamentavelmente, não tenho código de amostra para isso no momento. Vou testar isso mais tarde, quando eu configurar meu sistema corretamente. A função MsiEnableLog é uma chamada de função relacionada que permitirá o log do arquivo. Atualização: Aqui está o que parece um exemplo de SDK em funcionamento .
No nível da interface da linha de comandos , você também pode configurar o log para liberar seu buffer imediatamente para arquivar, adicionando o ! parâmetro:
Isso significa que o arquivo de log é gravado continuamente, para que nenhum buffer de log seja perdido se o msiexec.exe travar. O custo é de um instalador significativamente mais lento devido à sobrecarga de E / S.
fonte
MsiExec
só pode fazer logon em um arquivo; portanto, você terá que repetir o conteúdo desse arquivo após a conclusão do instalador.fonte
Eu preferiria armazenar em cache o arquivo de log MSI no sistema local permanentemente em um local comum para cada instalação e depois apenas registrar o código de saída de toda a instalação. Se a instalação relatar êxito, o arquivo de log será bastante desinteressante? Apenas mais "barulho"?
Além disso, existem vários sistemas de entrega de software que capturam as informações de log para uma instalação MSI e as armazenam centralmente. Um exemplo é o SCCM (Microsofts renomeado para Systems Management Server - SMS).
Configurando o log para todos os arquivos MSI, consulte a seção "Globalmente para todas as configurações em uma máquina": http://www.installsite.org/pages/en/msifaq/a/1022.htm
fonte
Eu uso o seguinte script do PowerShell. Ele ainda requer gravar o log em um arquivo, mas também grava o conteúdo ao vivo no stdout:
fonte