Batch - Attendre la fin d'un processus

Résolu
joujou07 Messages postés 257 Date d'inscription   Statut Membre -  
 anonyme -
Bonjour,
je bosse actuellement sur un batch, au début de celui-ci un programme se lance et mon batch se met en pause, mais j'aimerais que le batch continue dès que le processus lancé se ferme.
Quelq'un a-t-il la solution ?

PS : J'ai Windows XP

6 réponses

  1. W95Psp Messages postés 99 Date d'inscription   Statut Membre Dernière intervention   36
     
    Bonjour,
    Pour faire d'un processus un processus bloquant avec MS-DOS, il suffit d'utiliser la commande start de cette manière :
    start /wait path\file.exe
    
    8
    1. anonyme
       
      Meeeeeeeeeeeeeeeeeeeeeeeeerrrrrrrrrrrrrrrrrrrrrrrrrrrrciiiiiiiiiiiiiiiiiiiiiiiiiiiii
      beaucoups je cherchait ça depuis........................
      0
    2. anonyme
       
      JE TAIME
      vraiment
      0
  2. joujou07 Messages postés 257 Date d'inscription   Statut Membre 45
     
    Avec start
    3
    1. cchristian Messages postés 928 Statut Membre 131
       
      Bonjour,

      Essaie plutôt avec un CALL, le START ne rend pas "la main" à l'appelant.
      0
      1. joujou07 Messages postés 257 Date d'inscription   Statut Membre 45 > cchristian Messages postés 928 Statut Membre
         
        Franchement, c'est la deuxième fois que tu m'aides, tu es un ze BOSS en MS-DOS toi ! Merci
        0
    2. Tartempion
       
      Hmm, plutôt efficace, mais j'ai un cas que ça ne résout pas : comment savoir quand un Installshield s'est terminé ??
      ce dernier crée un processus clone, donc, call ne suffit pas :(

      J'ai essayé avec différents paramètres d'IS (dont /deleter et /clone_wait ou /wait_clone), ça n'a rien changé :(
      0
    3. Tartempion : le retour
       
      Bon, bah j'ai trouvé une solution qui marche pour mon cas, avec un VBscript (.vbs)

      Voila mon code, si la mise en page ne le ruine pas, il suffit de le copier/coller pour le faire tourner.

      En gros, dans mon cas, j'attend tout simplement que deux processus (ceux d'un Installshield) soient terminés avant de continuer l'exécution.

      Le code que je présente ici est juste un script d'attente, qui est appelé, en amont, par un batch qui lance divers autres batchs via des call.
      i.e. :
      call batch1.bat
      call batch2.bat
      call wait.vbs
      call batch3.bat
      etc...



      'Script qui attend au tournant la fin du process Installshield pour permettre aux installations de se continuer.
      'J ai toujours vu les deux mêmes processus sur les machines : _INS5576._MP & _ISDEL.EXE
      'Si pour une raison quelconque, les processus créés ont d'autres noms, il faudra lancer les étape manuellement,
      'ou trouver un moyen plus fiable pour automatiser les installations.



      wscript.sleep 5000 ' On attend un peu pour être sûr que l'install s'est lancée

      set svc=getobject("winmgmts:root\cimv2")
      sQuery1="select * from win32_process where name='_INS5576._MP'" ' Nom du processus dont on veut attendre la fin
      sQuery2="select * from win32_process where name='_ISDEL.EXE'" ' Nom du processus dont on veut attendre la fin
      set cproc1=svc.execquery(sQuery1)
      set cproc2=svc.execquery(sQuery2)
      iniproc=cproc1.count + cproc2.count 'Nombre de processus ayant le nom recherché
      Do While iniproc > 0 'Boucle tant qu'il en reste au moins un de lancé
      wscript.sleep 1333 'Attente relativement passive
      set svc=getobject("winmgmts:root\cimv2")
      set cproc1=svc.execquery(sQuery1)
      set cproc2=svc.execquery(sQuery2)
      iniproc=cproc1.count + cproc2.count
      Loop
      set cproc1=nothing 'Libération de la mémoire ?? de variables système ??
      set cproc2=nothing
      set svc=nothing

      'Set WshShell = WScript.CreateObject("WScript.Shell")
      'WshShell.Run "%windir%\notepad.exe", 1, True 'lancement d'un programme une fois que ceux attendus sont terminés
      'Set WshShell = Nothing
      0
  3. cchristian Messages postés 928 Statut Membre 131
     
    Bonsoir,

    Ton batch lance un autre batch si j'ai bien compris ?

    Ce programme appelé est activé avec quelle commande CALL, START .............
    1
  4. -Shadow-
     
    MS-DOS est un système mono-tâche (une commande à la fois) donc pas besoin de mettre un code pour attendre la fin du processus, ça se fait déjà.

    Si tu veux attendre un peu:
    ping localhost > NUL
    

    @+
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. joujou07 Messages postés 257 Date d'inscription   Statut Membre 45
     
    ok je vais essayer
    0
    1. cchristian Messages postés 928 Statut Membre 131
       
      Bonsoir,

      Merci, tiens-nous informé,
      0
  7. joujou07 Messages postés 257 Date d'inscription   Statut Membre 45
     
    C'était effectivement sa.
    0
    1. cchristian Messages postés 928 Statut Membre 131
       
      Bonjour,

      Merci pour le retour,
      0