Oi pessoal, se alguém souber como ajudar num problema, agradeço.
Tenho um programa em Java que escreve um arquivo .bat que é executado num servidor windows server.
Esse .bat faz a instalação de serviços automaticamente, porém, quando ao instalar/desinstalar um serviço é mostrada a janelinha de “installed successfuly” onde deve-se pressionar o botão de ok. Como a instalação é automática, essa janela deve ser fechada automaticamente.
Tenho um executável testado que fecha essa janela(janela ativa).
Chamo esse .exe de dentro do .bat, mas a execução da batch não continua.
O .exe chega a ser executado, mas o comando imediatamente posterior não é executado, pois deve ficar esperando o fim da execução do .exe, que só ocorrerá ao surgir a janelinha de “installed successfuly” que não surge, pois isso ocorreria com o comando seguinte.
Abaixo segue o trecho do .bat para entenderem melhor.
echo Parando o serviço JDIPSTAV03ReceptorProd --> OK
net stop "JDIPSTAV03ReceptorProd" --> OK
echo Executando o programa que fecha a janela ativa do comando -uninstall --> OK
start "F_Ativa.exe" /SEPARATE /HIGH F_Ativa.exe --> OK mas, nesse ponto fica travado, não executa o comando seguinte.
echo O programa 'F_Ativa.exe' foi executado, aguardando a janela ativa 'Information'...SJDIPSTAV03Receptor.exe --> não executa
echo Desinstalando o serviço SJDIPSTAV03Receptor.exe
SJDIPSTAV03Receptor.exe -uninstall --> não executa (esse comando abre a janela ativa "installed successfuly" que é fechada pelo .exe)
Já tentei colocar o parâmetro MIN no comando start, mas tb não funcionou.
São vários serviços, logo devem ficar dentro de um loop para:
parar o serviço
desinstalar
fechar a janela ativa
copiar o novo serviço
repetir o processo para o serviço seguinte.
Caso alguém tenha uma outra idéia, é bem-vinda.
Vc não pode realizar a execução diretamente pelo java, (Runtime)? Seria mais simples assim controlar todas as execuções e dependencias…
Outra opção (menos viavel que a primeira, acredito) seria utilizar o ANT, ele pode realizar tanto tarefas sequencias qto fluxos concorrentes.
Tenta executar através de um command independente:
cmd /c
echo Parando o serviço JDIPSTAV03ReceptorProd --> OK
net stop "JDIPSTAV03ReceptorProd" --> OK
echo Executando o programa que fecha a janela ativa do comando -uninstall --> OK
cmd /c "start F_Ativa.exe /SEPARATE /HIGH F_Ativa.exe" --> OK mas, nesse ponto fica travado, não executa o comando seguinte.
echo O programa 'F_Ativa.exe' foi executado, aguardando a janela ativa 'Information'...SJDIPSTAV03Receptor.exe --> não executa
echo Desinstalando o serviço SJDIPSTAV03Receptor.exe
cmd /c "SJDIPSTAV03Receptor.exe -uninstall" --> não executa (esse comando abre a janela ativa "installed successfuly" que é fechada pelo .exe)
cristian_clever, tb já tentei o comando call. Aliás, tentei várias combinações e nenhuma funcionou. A questão de usar esse arquivo .bat é que já tem todo um fluxo que funciona assim, e está todo integrado. Mas realmente já não sei mais o que fazer e estou tentando codificar em Java pra testar se funciona pra depois tentar integrar ao código existente.
Galera, consegui resolver o problema.
O que ocorria era que, em todo o script da bat cada linha faz um redirecionamento para o log da ferramenta de distribuição.
(comando >> %1 2>&1)
A linha em que chamava o executável tentava redirecionar para o log, só que a linha somente mandaria o log quando o comando seguinte fosse executado e nunca seria executado porque o comando anterior esperava a execução do comando seguinte. Somente após milhões de testes consegui identificar essa situação que agora me parece óbvia, foi só retirar o redirecionamento.
Agradeço a todos pela tentativa de ajuda.
Aliás, preciso codificar o programa para pegar a janela ativa cujo nome tenha “Information” se der sucesso na instalação ou “Error” se der erro. Tentei montar um condicional para pegar os 2 tipos, mas não funciona. Caso alguém conheça ou saiba como codificar, dá uma dica.
Abaixo segue o código para quem um dia precisar, é preciso instalar o programa AutoIt.
Cara, na minha opinião, não há problemas em ressucitar tópicos. A questão aqui é que não lembro direito, pois mudei de empresa e não mexo mais com essas bats.
Mas, tente entender a sintaxe do comando abaixo (comando DOS) que com certeza vc entenderá como se tira o redirecionamento. Procure no Google sobre comandos DOS
(comando >> %1 2>&1)
Pelo que posso lembrar, as setas “>” (sinal de maior) é que fazem o redirecionamento para onde se deseja (os números 1 ou 2 são tipos de entrada e saída do comando), nesse meu caso, retirei a linha acima do código que eu tinha, pois o sinal “>>” que fazia o redirecionamento, mas não lembro o significado da sintaxe do comando.