Como posso verificar se a instância de um programa está em execução ou não antes de executar esse programa?

1

Estou à procura de um software (pode ser como um script BAT) que possa verificar se a instância de um programa está em execução ou não, antes de executar esse programa. E se o software / script detectar que o programa não está em execução, ele deve executar esse programa, senão não deve fazer nada.

Nota: O programa que eu vou rodar ( uTorrent ) não tem detecção para checar se uma instância de si é já em execução, antes de se executar.

Estou perguntando isso porque atualmente estou usando um software ( Networx ) que executa o uTorrent se detectar que meu a largura de banda da conexão com a internet não é usada há algum tempo (no meu caso, configuro para executar o uTorrent se detectar que 50 KB ou menos foram baixados e carregados em um período de 5 minutos).

No entanto, ele não possui um recurso para verificar se um programa já está em execução antes de chamá-lo. Se ele roda o uTorrent enquanto o uTorrent já está rodando, a janela do uTorrent vai para a frente da tela, roubando o foco da janela, o que pode ser uma distração se você estiver trabalhando em uma janela e não quiser outra janela na frente da tela. / p>

O argumento uTorrent / MINIMIZED só funciona corretamente se o uTorrent ainda não estiver em execução.

Ou alguém sabe de outro software que pode fazer o que o software que estou usando atualmente, exceto que ele irá verificar se o uTorrent já está rodando, antes de chamá-lo?

Edit: Eu gostaria de acrescentar que é preferível que o software / script seja executado minimizado ou oculto e não vá para o primeiro plano ou roube o foco da janela. Além disso, o software ou o script BAT, de preferência, deve sair após realizar sua tarefa.

    
por galacticninja 01.04.2011 / 07:52

2 respostas

3

Algo assim, talvez?

tasklist | find "programname.exe"
if errorlevel 1 c:\path\to\programname.exe
    
por 01.04.2011 / 08:12
1

É quase certamente possível fazer em um arquivo de lote, mas (como qualquer coisa não-trivial) não será fácil.

No entanto, o PowerShell facilita isso:

if (-not (Get-Proceess "Name")) {
  #run new instance here
}

onde Name é substituído pelo nome do processo (geralmente é o nome do arquivo sem .exe ).

    
por 01.04.2011 / 08:08