Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Général Développement > Programmation Windows > Scripts/Batch

Scripts/Batch Forum d'entraide sur la programmation de scripts Batch et Powershell sous Windows.

Réponse
 
Outils de la discussion
Vieux 31/08/2008, 14h58   #1 (permalink)
Futur Membre du Club
 
Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
Par défaut Lancement de deux .exe

Bonjour à tous !

J'ai fais du batch il y a quelques années mais j'ai un peu perdu tout ça ... En tout cas je pense que c'est le langage le plus simple à utiliser pour ce que j'aimerais faire :

En fait, je fais tourner un serveur de jeux en ligne sur mon PC. Pou cela, je dois lancer deux fichiers exécutables, l'un après l'autre. Ces fichiers ne doivent jamais être interrompus pour que le serveur puisse tourner. Mais il arrive quelques fois que l'un d'entre eux se ferme tout seul (souvent des bugs dans les requêtes sql par exemple ...).

Appelons les deux fichiers, dans leur ordre de lancement (l'un doit être lancé avant l'autre), fichier1.exe et fichier2.exe.

J'aimerais donc créer un petit fichier .bat qui ferait :

- Vérification que fichier1.exe ET/OU fichier2.exe sont ouverts.
- Fermer le ou les fichier(s) reconnu(s) comme ouvert(s).
- Lancer fichier1.exe.
- Lancer fichier2.exe.

Voila !
J'ai lu la FAQ, il y a les commandes, mais c'est simplement que je ne sais plus du tout comment coder en Batch, donc pas facile à mettre en forme
Ca doit être simple pour vous je pense ! ^^

Je me souviens de la commande "start", mais si je mets :
Code :
start fichier1.exe
start fichier2.exe
Ils seront lancés en même temps non ?

Je vous remercie par avance !

Dernière modification par Petrucci ; 31/08/2008 à 15h14
Petrucci est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/08/2008, 17h56   #2 (permalink)
Membre éclairé
 
Date d'inscription: mai 2007
Messages: 316
Par défaut

salut,

Quel est ton système d'exploitation ?
maxim_um est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/08/2008, 18h08   #3 (permalink)
Futur Membre du Club
 
Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
Par défaut

Je tourne sous Vista
Petrucci est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/08/2008, 18h12   #4 (permalink)
Membre éclairé
 
Date d'inscription: mai 2007
Messages: 316
Par défaut

regardes si tu disposes de «tasklist» et «taskkill»
maxim_um est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/08/2008, 18h19   #5 (permalink)
Futur Membre du Club
 
Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
Par défaut

Je possède bien ! (dans system32)
Petrucci est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/08/2008, 18h31   #6 (permalink)
Membre éclairé
 
Date d'inscription: mai 2007
Messages: 316
Par défaut

Dans ce cas, tu as tout le nécessaire pour faire ce que tu souhaites.

tasklist te permet de savoir quelles sont les applications en cours d'exécution.
taskkill sert à mettre fin au programme de ton choix
find à rechercher une chaine.
start à lancer une application
et si tu as besoin d'un délai par exemple de deux secondes entre les deux lancements tu peux utiliser:
Code :
ping -n 2 127.0.0.1 > NUL
Pour les autres commandes, je t'invite à lire leur aide en ligne en utilisant cette syntaxe sur la console:
Code :
LaCommande /?
maxim_um est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/08/2008, 18h38   #7 (permalink)
Futur Membre du Club
 
Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
Par défaut

Merci !

J'avoue ne pas avoir beaucoup de temps en ce moment pour ré-apprendre l'algo des batch et comment l'utiliser ... Mais si vous voulez vraiment pas le faire alors j'essaierai quand je pourrais

Je viens d'avoir une autre idée :

Est-ce possible de créer un programme ouvert en permanence, et qui puisse détecter si justement mes fichier1.exe et fichier2.exe sont fermés ? (genre toutes les 30secondes). Et si l'un des deux est fermé, il le relance !

Voila, merci en tout cas de tes réponses maxim_um
Petrucci est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/08/2008, 18h47   #8 (permalink)
Membre éclairé
 
Date d'inscription: mai 2007
Messages: 316
Par défaut

Citation:
Envoyé par Petrucci Voir le message
Est-ce possible de créer un programme ouvert en permanence, et qui puisse détecter si justement mes fichier1.exe et fichier2.exe sont fermés ? (genre toutes les 30secondes). Et si l'un des deux est fermé, il le relance !

Oui, c'est tout à fait possible. L'idéal serait de faire un service pour Windows qui prendra en charge ce que tu souhaites et dont le fonctionnement serait événementiel et non basé sur un Timer. Maintenant si tu n'as pas de notions en programmation, avec un script de commande tu peux aussi t'en sortir pour peu que tu fasses un effort de quelques minutes.
maxim_um est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/08/2008, 19h31   #9 (permalink)
Futur Membre du Club
 
Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
Par défaut

Citation:
Envoyé par maxim_um Voir le message
Oui, c'est tout à fait possible. L'idéal serait de faire un service pour Windows qui prendra en charge ce que tu souhaites et dont le fonctionnement serait événementiel et non basé sur un Timer.
En effet, un fonctionnement évenementiel serait plus approprié. Si tu as des idées pour m'aider à mettre ça en forme, ça m'aiderait beaucoup ! (batch ou script de commandes ^^).

Citation:
Envoyé par maxim_um Voir le message
Maintenant si tu n'as pas de notions en programmation, avec un script de commande tu peux aussi t'en sortir pour peu que tu fasses un effort de quelques minutes.
J'ai des notions de programmations, mais ça reste très théorique. Dans la pratique, j'ignore les typographies des langages. Le script de commande serait peut-être bien dans mon cas alors !

Je tiendrait ce topic à jour pour montrer si j'ai avancé.
Petrucci est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/08/2008, 20h02   #10 (permalink)
Membre éclairé
 
Date d'inscription: mai 2007
Messages: 316
Par défaut

En effet, d'après ce que tu écris un script de commande semble plus adapté à tes capacités actuelles.

Saches dans la foulée que tu dois tirer un trait sur le mode événementiel qui lui nécessite une réelle programmation et la production d'une dll ou d'un exécutable qui doit être intégré à Windows.

Cela dit avec un script ça marche bien. Une fois que tu auras montré une réelle motivation d'apprentissage et que tu auras produit quelques lignes de "code", tu pourras prétendre à un soutien plus approfondi avec de différentes suggestions de la part des différents intervenants, et ce jusqu'à l'obtention d'un script stable qui est en parfaites adéquations avec ton besoin.

Aussi, il ne faut pas que tu te décourages, il n'est en aucun cas question ici d'apprendre de l'algorithme ou je ne sais quoi d'autres, mais simplement de savoir utiliser les commandes mises à disposition par le système pour générer un script fonctionnel. L'aide en ligne fournit toutes les informations nécessaires et c'est pour cela qu'il ne s'agit que d'une affaire de quelques minutes le temps d'un effort de lecture.

Voilà, bonne continuation à toi.
maxim_um est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/08/2008, 21h13   #11 (permalink)
Futur Membre du Club
 
Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
Par défaut

Ok, je vais m'y mettre dès que la rentrée sera bien entammée (j'entre en DUT Informatique d'ailleurs ).

En tout cas merci de toutes ces infos maxim_um !

Au passage, si une âme charitable se sent d'attaque pour me mâcher le travail un petit coup ...

Bon ok je sors
Petrucci est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/09/2008, 00h35   #12 (permalink)
Futur Membre du Club
 
Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
Par défaut

Bon j'ai fait ce petit test :

Code :
TaskList | findstr /c:fichier1.exe > nul
If %errorlevel%== 0 
	taskkill /im fichier1.exe
	taskkill /im fichier2.exe
If %errorlevel%== 1 
	TaskList | findstr /c:fichier2.exe > nul
	If %errorlevel%== 0
	taskkill /im fichier1.exe
	taskkill /im fichier2.exe
	
start fichier1.exe
ping -n 2 127.0.0.1
start fichier2.exe
Mais ça a pas l'air de marcher ...
C'est un problème de fin de condition je pense, mais je vois pas bien comment le régler là

Dernière modification par Petrucci ; 06/09/2008 à 01h31
Petrucci est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/09/2008, 00h51   #13 (permalink)
Responsable Windows
 
Avatar de shawn12
 
Date d'inscription: avril 2006
Localisation: Aveyron, France
Âge: 22
Messages: 1 531
Par défaut

Il faut tout mettre sur une seule ligne pour l'instruction if il me semble.
Aide en tapant ceci dans la console :
Code :
help if
shawn12 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/09/2008, 01h50   #14 (permalink)
Futur Membre du Club
 
Date d'inscription: novembre 2006
Localisation: Nantes
Messages: 38
Par défaut

Merci de cette précision !
Donc après des modifs j'arrive à ça :

Code :
TaskList | findstr /c:fichier1.exe > nul
If %errorlevel%== 0. taskkill /im fichier1.exe. taskkill /im fichier2.exe. Else TaskList | findstr /c:fichier2.exe > nul.

If %errorlevel%== 0. taskkill /im fichier1.exe. taskkill /im fichier2.exe.
	
start fichier1.exe
ping -n 2 127.0.0.1
start fichier2.exe
L'ennui, c'est que les "taskkill" ont pas l'air de fonctionner : mes programmes ne se ferment pas comme je l'ai indiqué ..
Petrucci est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/09/2008, 15h24   #15 (permalink)
Responsable Windows
 
Avatar de shawn12
 
Date d'inscription: avril 2006
Localisation: Aveyron, France
Âge: 22
Messages: 1 531
Par défaut

Enleve les points après tous tes fichier1.exe, fichier2.exe.
Sépare les différentes commandes taskkill par un caractère "&".

Exemple de ligne qui fonctionne chez moi (ferme le notepad et la calculette dans tous les cas) :
Code :
if 0==0 taskkill /im notepad.exe & taskkill /im calc.exe
        \______________________/   \___________________/
               commande 1               commande 2      

   ____ --> condition            _ --> séparateurs des commandes
shawn12 est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Général Développement > Programmation Windows > Scripts/Batch



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide