Estou tentando criar um script para executar um exe no desligamento para instalar o sp1. meu script é algo como (não é um script de morcego real).
If installed GOTO END
Install.exe
END:
Meu problema é que quando ele é executado, ele inicia o instalador, depois termina o script porque o instalador é um processo diferente e segue desligando o processo de instalação porque o computador está desligando e desligando o sistema (pelo menos, é o que eu acho está fazendo.)
Existe alguma maneira de dizer para esperar até que o processo iniciado seja concluído e depois desligado?
Tente correr
Um caminho mais curto:
Também
poderia ser usado , embora
more
eventualmente você consiga capturar alguma saída do console. E esta é a razão pela qual funciona - o comando canalizado aguarda a entrada até que o .exe seja concluído.Atualizar
Para o Windows 8 e 10, há uma nova ferramenta que vem com o Windows chamada,
scriptrunner
que também pode ser usada para esse fim:Chamar o exe diretamente do arquivo em lotes ou usar
start /wait
funcionará, mas há uma ressalva.Se o exe que você chama criar outro processo, como chamar outro exe, e sair do arquivo em lotes, o processamento continuará após o exe chamado ser encerrado, pois não tem conhecimento de outros processos iniciados por ele.
No seu caso, isso é um problema real porque os instaladores normalmente extraem arquivos de alguma forma de contêiner compactado, que pode ser incorporado no próprio exe, então dispara um dos arquivos extraídos e sai. Alguns instaladores fornecem parâmetros de linha de comando que dizem ao exe original para não sair até que toda a instalação esteja concluída, então isso é algo que você pode querer investigar. Fora isso, não há uma maneira real de contornar isso apenas com arquivos em lote e seria necessária uma solução programática para resolver.
Aqui está um exemplo usando MATLAB! Eu assumi que a configuração do caminho para o MATLAB está concluída e a saída do MATLAB está sendo garantida pelo arquivo FileName.m (ou o usuário o especificou internamente).
Eu tive o problema @John Gardeniers Had ou descrito, onde meu exe chamou outro exe e encerrou, portanto, start /wait não funcionou. Eu criei um "loop while" para verificar se está em execução e depois seguir em frente quando terminar. Os tempos podem ser ajustados para atender às suas necessidades.
Semelhante ao arquivo @FreeSoftwareServers, precisei aguardar a inicialização de um programa que não foi iniciado pelo arquivo em lote. Em seguida, aguarde alguns segundos para iniciar um programa que se conecte ao programa que estou verificando. Se você quiser que o arquivo expire depois de verificar uma certa quantidade de vezes, você pode usar um contador dentro do loop para limitar a quantidade de vezes que ele faz o loop.
O primeiro TIMEOUT determina com que frequência o loop se repetirá, procurando o programa. Isso pode ser modificado para atender às suas necessidades.
Você pode usar o comando start /wait. Isso inicia um aplicativo e espera que ele termine.
Ou se você sabe quanto tempo leva para executar, pode dar uma olhada no comando sleep, fornecido pelo Windows Server 2003 Resource Kit Tools . Sleep.exe pode ser usado para pausar seu lote por qualquer número de segundos para permitir que o programa seja totalmente instalado antes que o arquivo de lote prossiga para instalar qualquer outra coisa. Existem alguns programas que ignoram a sintaxe "start /wait", devido ao próprio programa iniciar outro processo, então o sleep.exe é muito útil.