1 votes

Comment vérifier si l'instance d'un programme est en cours d'exécution ou non, avant d'exécuter ce programme ?

Je suis à la recherche d'un logiciel (qui pourrait être un script BAT) qui pourrait vérifier si l'instance d'un programme est en cours d'exécution ou non, avant d'exécuter ce programme. Et si le logiciel / script détecte que le programme n'est pas en cours d'exécution, il devrait exécuter ce programme, sinon il ne devrait rien faire.

Note : Le programme que je vais exécuter ( uTorrent ) n'a pas de détection pour vérifier si une instance de lui-même est déjà en cours d'exécution, avant de s'exécuter lui-même.

Je pose cette question parce que j'utilise actuellement un logiciel ( Networx ) qui exécute uTorrent s'il détecte que la bande passante de ma connexion Internet n'a pas été utilisée pendant un certain temps (dans mon cas, je l'ai configuré pour qu'il exécute uTorrent s'il détecte que 50 Ko ou moins ont été téléchargés et téléchargés au cours d'une période de 5 minutes).

Cependant, il ne dispose pas d'une fonction permettant de vérifier si un programme est déjà en cours d'exécution avant de l'appeler. S'il exécute uTorrent alors que uTorrent est déjà en cours d'exécution, la fenêtre de uTorrent passe à l'avant de l'écran, volant le focus de la fenêtre, ce qui peut être gênant si vous travaillez sur une fenêtre et que vous ne voulez pas qu'une autre fenêtre passe à l'avant de l'écran.

L'argument uTorrent /MINIMIZED ne fonctionne correctement que si uTorrent n'est pas déjà en cours d'exécution.

Ou bien quelqu'un connaît-il un autre logiciel capable de faire la même chose que le logiciel que j'utilise actuellement, sauf qu'il vérifie si uTorrent est déjà en cours d'exécution avant de l'appeler ?

Modification : j'aimerais ajouter qu'il est préférable que le logiciel / script s'exécute en mode réduit ou caché et ne passe pas au premier plan ou ne vole pas le focus de la fenêtre. De même, le logiciel ou le script BAT devrait de préférence se terminer de lui-même après avoir accompli sa tâche.

3voto

Jason Sherman Points 1089

Quelque chose comme ça, peut-être ?

tasklist | find "programname.exe"
if errorlevel 1 c:\\path\\to\\programname.exe

2voto

codemac Points 689

Il est certainement possible de le faire dans un fichier batch, mais (comme toute chose non triviale) ce ne sera pas facile.

Cependant, PowerShell facilite cette tâche :

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

Name est remplacé par le nom du processus (il s'agit généralement du nom du fichier sans .exe ).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X