Pause durant l'éxecution d'un MSI...

Pause durant l'éxecution d'un MSI... - VB/VBA/VBS - Programmation

Marsh Posté le 08-07-2006 à 10:47:45    

Bonjour,
 
Je viens de terminer un script en VBScript qui aura pour but le déploiement par MSI d'une application. Je souhaiterais l'améliorer  :)  
 
Lorsque le MSI se lance je dois attendre la fin de son éxecution avant de poursuivre le script.
 
Pour l'instant j'utilise simplement la fonction :
Wscript.sleep 30000
Mais cela n'est pas satisfaisant car d'un ordinateur à un autre le temps d'éxecution du MSI sera différent.
 
Je souhaiterais donc faire une pause durant l'éxecution du MSI et reprendre juste après.
 
Je pense procéder de cette manière :
Test toutes les secondes pour savoir si le process "msiexec.exe" est en cours

  • Si oui, le test s'effectue à nouveau
  • Si non, le script se poursuit


Est que je dois travailler dans cette direction ou bien est-il possible d'écrire :

  • Faire une pause
  • Lorsque le proccess "msiexec.exe" se termine alors passer à la suite du script


Quelle solution vous choisiriez ?
 
Passez une excellente journée  :hello:

Reply

Marsh Posté le 08-07-2006 à 10:47:45   

Reply

Marsh Posté le 08-07-2006 à 12:14:57    

si tu sais gérer le fait de connaitre l'état d'activité d'un programme, je te conseil de faire une boucle while avec un pause dedans =)

Reply

Marsh Posté le 08-07-2006 à 12:27:08    

jpcheck a écrit :

si tu sais gérer le fait de connaitre l'état d'activité d'un programme


Je ne sais pas faire mais je vais apprendre  :)
 
Merci du conseil, je vais donc travailler avec une boucle while et une pause...
 
Je reviens dés que ce que ça fonctionne ;)  
 

Reply

Marsh Posté le 08-07-2006 à 18:22:06    

Voilà ce que j'ai trouvé  :)  

Citation :


Début du script qui lance le MSI
 
Partie du script qui fait une pause lors de l'éxecution du MSI
--------------------------------------------------------------------
Dim MSI
Set Otest = GetObject("WinMgmts:{impersonationLevel=impersonate}" )
 
Wscript.sleep 2000
 
While MSI <> 1
 
   Wscript.sleep 1000
   MSI = 0
   Set test=Otest.ExecQuery("Select * from Win32_Process" )
 
      For Each valeur In test  
         if valeur.name = "msiexec.exe" then
         MSI = MSI + 1
         end if
      Next
 
Wend
--------------------------------------------------------------------
Poursuite du script...


 
 
Simplement une chose...
On peut s'apercevoir que la partie de la boucle While tourne tant que MSI est <> de 1. Au début j'avais mis 0 mais ça ne marchait pas...
Effectivement, lors de l'éxecution du MSI, msiexec.exe est lancé deux fois dans les processus :

  • une fois par l'utilisateur (qui lance le script)
  • une deuxième fois par le System

A la fin de l'éxecution du MSI, le msiexec.exe lancé par l'utilisateur se ferme automatiquement mais celui du System reste actif. D'ou le 1 dans la boucle while...
 
Est-ce normal que System ne ferme pas le msiexec.exe qu'il a ouvert ? Il reste en mémoire mais n'est plus utilisé par le processeur...
 
Merci à jpcheck pour l'aide apportée ci-dessus.  ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed