Instala o .msi do script, detecta quando a instalação é feita

6

Estou tentando fazer um script de instalação. Eu quero instalar um arquivo .msi, Python, e depois instalar outras coisas depois que o Python estiver instalado. Eu já vejo como fazer uma instalação por linha de comando . No entanto, msiexec retorna imediatamente, mesmo quando a instalação ainda está em execução. Como eu detectaria a conclusão de uma instalação do msi a partir de um script em lote?

    
por Claudiu 11.10.2010 / 19:01

3 respostas

9

Não sei como o Python manipula a passagem de comandos para o Windows / DOS, mas usando um arquivo em lote simples e o comando start /wait , o arquivo em lotes para e aguarda até que o MSI termine antes de passar para a próxima etapa. / p>

Por exemplo, para instalar um aplicativo principal, seguido por um patch apenas quando terminar e, em seguida, um programa final, uma vez concluído, solte essas linhas em um arquivo .cmd:

start /wait msiexec /i O12Conv.msi /qb
start /wait msiexec /p O12Convsp1-en-us.msp /qb
start /wait msiexec /i mpsetupedp.msi
    
por 19.10.2010 / 12:58
0

É complicado e não é confiável, mas existem maneiras de monitorar a existência de um processo específico na lista de processos. Você escreve seu loop para NOOP enquanto aguarda que o processo não esteja mais lá e, em seguida, você executa as próximas etapas. Existem algumas maneiras de lidar com isso.

A ferramenta SysInternals pslist mostrará processos, embora a análise da saída possa ser complicada. O PowerShell pode acessar as APIs do .NET para fazer o monitoramento do processo por meio do cmdlet get-process .

Esses métodos monitoram apenas a existência de um processo, eles não podem verificar os códigos de saída e, portanto, não podem saber se um processo foi encerrado normalmente ou em um estado de erro. Para isso, você terá que processar todos os logs MSI que você especificou serem gerados, ou possivelmente cavar no Log Paralelo do Windows para eventos de erro.

    
por 11.10.2010 / 19:16
-1

Uma instalação bem-sucedida retornará qualquer um dos 3 códigos: 0,1641,3010, dependendo da opção de reinicialização. Por favor, tente modificar seu script de tal forma que ele retornará os códigos.

    
por 29.12.2015 / 12:56