Uma solução de força bruta é programar a execução do arquivo de lote repetidamente a cada minuto. O objetivo é que, se os programas estiverem em execução, que esta verificação não será perceptível pelo usuário.
Infelizmente, nesses computadores lentos que executam o Windows Embedded Standard 6, tasklist e sua variante são muito lentos, então temos que encontrar outra mecanismo para verificar se os programas estão sendo executados. Felizmente, parece que a verificação da existência de um arquivo ainda é muito rápido.
O mecanismo que proponho é lançar os programas usando esta sintaxe:
prog 2 >> \path\to\lockfile
O parâmetro "2 > > file" significa que o arquivo de erro do prog é redirecionado para lockfile. Este arquivo, também chamado de stderr no Linux, normalmente nunca é escrito para pela maioria dos programas. Enquanto o programa está em execução, o arquivo é bloqueado e não pode ser excluído, pois está em uso. Se o programa for interrompido, o arquivo pode ou não existir, mas pode ser excluído.
Aqui está um exemplo de um script que verifica se um arquivo existe e pode ser excluído. Eu adicionei os comandos echo, úteis durante a depuração de um script.
@echo off
if exist \path\to\lockfile (
echo lockfile exists
del \path\to\lockfile
if exist \path\to\lockfile (
echo lockfile is locked - program is running
) else (
echo lockfile was deleted - program is not running
**launch program here**
)
) else (
echo lockfile doesn't exist - program is not running
**launch program here**
)
Para fechar o programa sem iniciar automaticamente, como para manutenção, desabilitar o agendamento do arquivo em lotes.
Ou, se isso for demais, adicione outro arquivo chamado "maintenance" e verifique sua existência no arquivo de lote, não fazendo nada se ele existir. Exclua o arquivo quando a manutenção for finalizada.
Para testar, pode-se bloquear o arquivo por meio desse script em lote. Pressione qualquer tecla para parar:
pause 2 >> \path\to\lockfile
Referências: