Faire dépendre un processus d'un autre - VB/VBA/VBS - Programmation
Marsh Posté le 10-08-2007 à 12:27:58
salut, dans ton raisonnement, tu cherches juste à tester l'ouverture de process ? ou bien est-ce plus perfide que ca ?
Marsh Posté le 10-08-2007 à 14:59:41
Non le process4 a besoin des 3 autres (qu'ils soient lancés avant ou après importe peu) mais je ne veux pas que les 3 premiers process continuent à tourner après la fermeture du process4 .
Comme il s'agit d'applications qui tourneront sous Citrix il y aura de nombreux process de ce type lancés par différents utilisateurs, je ne peux donc pas faire un kill des 3 process en fonction de leur nom sous peine de shooter des process appartenant à quelqun d'autre.
Marsh Posté le 10-08-2007 à 16:27:45
et ces 3 process, c toi qui les lance non ? tu passes pas par un x = shell() ? tu kill just le x... non ?
Marsh Posté le 13-08-2007 à 08:33:42
Il faudrait que tous les process soient lancés par un .bat.
Mon soucis c'est que je ne sais pas attacher des process à un cmd.exe tout en rendant la main au cmd.exe pour lancer un autre process.
C'est par contre très facilement faisable sous bash (comme le montre l'exemple que j'ai donné plus haut et qui fait exactement ce que je veux) en utilisant un "&" à la fin de la commande : le process lancé est rattaché au bash mais rend la main, et en cas de fermeture du bash les process sont arretés.
Marsh Posté le 17-08-2007 à 03:38:45
peut etre qu'un fichier toto.bat avec dedans
start process1.exe
start process2.exe
...
...
pourrait t'aller
Marsh Posté le 17-08-2007 à 08:19:38
Le soucis avec le start c'est les process sont lancés de façon indépendante et ne sont pas rattachés au CMD.EXE qui les lance. Donc quand le CMD.EXE est arreté les applications restent ouverte...
Marsh Posté le 17-08-2007 à 12:16:25
Je ne sais pas si tes process ont besoin de continuer à tourner pendant que le 4 eme tourne aussi.
Parce que sinon tu peux faire avec la commande start /W
start /W process1.exe
start /W process2.exe
start /W process3.exe
start /W process4.exe
Le problème c'est qu'il vont s'exécuter toujours dans le même ordre et les uns à la suite des autres.
Faut voir si c'est possible dans ton cas ...
Marsh Posté le 17-08-2007 à 16:39:05
Malheureusement le process4 a besoin que les 3 autres tournent donc ca ne convient pas...
J'ai essayé de faire ca en VBS mais ca n'a pas l'air très probant non plus...
Marsh Posté le 17-08-2007 à 17:53:09
Code :
|
Je te propose ca. Bon c'est du Java certes mais tu peux tjrs en faire un executable. Je n'ai testé qu'en lançant 4 process de notepad mais ca ma l'air de marcher.
Quand le process 4 est terminé (fermer la fenêtre notepad) les autres process sont killés.
Après ce n'est pas très propre vu qu'il n'y a aucun test mais c'est un début de solution peut-être pour toi.
Marsh Posté le 18-08-2007 à 08:45:01
Je vais tester ca au boulot lundi, mais à vue de nez ca a l'air de correspondre à ce que je cherchais !
Merci beaucoup ju65
Marsh Posté le 20-08-2007 à 10:17:18
Ca marche parfaitement et la solution convient tout à fait à mon besoin.
Merci à toi !
Marsh Posté le 20-08-2007 à 14:05:25
ReplyMarsh Posté le 20-08-2007 à 14:40:29
Taz a écrit : ça fait plaise de faire une daube en java rien que pour ça |
Si tu sais faire la même chose en VBS ou avec un .BAT je suis interessé hein, dans le cas contraire tu as perdu l'occasion de passer à coté d'une réflexion déplacée.
Marsh Posté le 20-08-2007 à 15:15:31
le coup du bat qui lance les 4 process, c'est suffisant : dès que la fenêtre du bat est shootée (donc à la fermeture du client citrix) le cmd ouvert va butter de sang froid tout ce qu'il avait lancé.
j'ai le problème avec un batch de backup d'un ERP...
le batch arrête l'erp, fait le backup, puis le redémarre... sauf que si un con ferme la fenêtre "ne surtout pas toucher.bat" bah ça coupe le serveur d'un coup
autre exemple, cette fois pour le client du même ERP :
|
analogiquement tu devrait faire :
|
=> Ca lance les 3 premiers process.
=> Ca lance le 4 et ça reste en pause tant qu'il tourne.
=> Dès qu'il s'arrête, cmd s'arrête et s'occupe de virer tout ce qu'il a démarré.
Marsh Posté le 20-08-2007 à 15:33:31
Dans mon cas de figure les 3 .EXE qui doivent être "liés" à la présence du 4e ne rendent pas la main au CMD.EXE quand ils sont lancés : si j'applique ce que tu dis il ne lance que le 1er, le 2e est lancé à la fermeture du 1e et le 3e à la fermeture du 2e.
Donc dans ton cas pas de soucis mais dans le mien ce n'est pas exploitable.
Enfin le programme en Java faisant exactement ce que je veux ce n'est plus très grave
MagicBuzz a écrit : le coup du bat qui lance les 4 process, c'est suffisant : dès que la fenêtre du bat est shootée (donc à la fermeture du client citrix) le cmd ouvert va butter de sang froid tout ce qu'il avait lancé.
|
Marsh Posté le 20-08-2007 à 15:47:39
bourdel
tu colles un start devant process1.exe, process2.exe et process3.exe alors
Marsh Posté le 20-08-2007 à 15:48:14
bouffer 500 Mo de JVM par session utilisateur juste pour lancer une bouse qui démarre 4 programmes
va pas durer longtemps ton citrix
Marsh Posté le 20-08-2007 à 16:01:40
MagicBuzz a écrit : bourdel |
Avec un start devant à la fin de l'exécution du .bat les process ne sont pas tués
Marsh Posté le 20-08-2007 à 16:03:05
MagicBuzz a écrit : bouffer 500 Mo de JVM par session utilisateur juste pour lancer une bouse qui démarre 4 programmes |
Ca bouffe 20 Mo de mémoire (physique + virtuelle), sur 16 Go de RAM ca ne devrait pas être trop genant (surtout que cette appli est peu utilisée)
Marsh Posté le 20-08-2007 à 16:14:28
ouais enfin c'est quand même complètement overkill. Tu peux aussi faire une VM qui va faire un appel RPC pour lancer l'opération
Marsh Posté le 20-08-2007 à 17:56:57
juste par curiosité et si c'est pas trop indiscret c'était pour quoi que t'avais besoin de faire ce bat (enfin un prog java maintenant ) ?
Marsh Posté le 20-08-2007 à 21:19:25
Bon ok mon prog est lourd j'avoue . Mais bon je ne vois toujours pas d'autre proposition pour l'instant plus légère. J'attends voir comment vous faites ça en .bat ou autre ...
Marsh Posté le 20-08-2007 à 22:54:05
Ben déjà tu peux le faire en VBS, ça évite d'avoir une JVM en mémoire pour rien... WSH est de toute façon loadé par le système et est quand même bien plus light que Java.
Marsh Posté le 20-08-2007 à 23:06:22
MagicBuzz a écrit : Ben déjà tu peux le faire en VBS, ça évite d'avoir une JVM en mémoire pour rien... WSH est de toute façon loadé par le système et est quand même bien plus light que Java. |
Oui oui c'est sur que la JVM en mémoire ... c'est pas nécessaire pour un prog comme ça.
J'ai été à la solution la plus rapide, c'était surtout pour aider notre cher ami zeaurelien.
Mais finalement je trouve ca plutôt intéressant j'vais essayer de voir du côté d'autres langages pour réaliser ça autrement ... quand j'aurais 5 minutes ^^
Marsh Posté le 21-08-2007 à 00:02:43
Ben en gros, tu modifies ton code à la sauce VB et c'est pareil
Code :
|
Marsh Posté le 21-08-2007 à 00:20:17
Oué d'accord c'était tout simple en fait. Lors de ma recherche initiale j'avais + opté pour un truc du genre WaitFor(). et la recherche dans les fonctions associées aux processus. C'est vrai qu'avec WShell c'est super simple.
Bien joué MagicBuzz
Marsh Posté le 21-08-2007 à 10:31:22
Décidément je suis gaté, MagicBuzz ta solution en VBS marche effectivement très bien.
Merci à vous deux, à ju65 pour avoir débloqué un soucis que j'avais en production (le critère N° était sur le coup d'avoir un truc rapidement fonctionnel) et à MagicBuzz pour avoir une solution plus "propre".
Marsh Posté le 21-08-2007 à 19:20:37
ceci dit, ça doit se faire en bat aussi... mais là c'est vrai que je sèche un peu, pis c'est pas super documenté...
faudrait trouver un vieux au fond de sa caverne avec du MSDOS moussu sur les épaules, il pourrait peut-être nous dire.
Marsh Posté le 09-08-2007 à 17:00:20
Bonjour.
Je cherche à faire dépendre l'exécution de 3 exécutables windows (.exe) de la présence d'un 4e exécutable.
L'ordre de lancement importe peu mais il faudrait que si le dernier .exe est fermé tous les autres .exe le soient.
En gros pour faire une analogie shell Unix j'aurai besoin d'un truc du genre :
#!/bin/bash
process1.exe &
process2.exe &
process3.exe &
process4.exe
exit
Est ce que quelqun sait faire ca au travers d'un .VBS ou d'un .CMD / .BAT ?
Merci beaucoup