TUTOS.EU

Lancer un programme

Comment lancer un executable en VbScript

Lancement d'un programme avec la méthode .exec
On verra ensuite que cette méthode permet de récupérer le flux de sortie généré par l'exe. On pourra donc analyser ce que va afficher le programme.

Set WSHShell = CreateObject("WScript.Shell")
Set MonExe = WSHShell.Exec("notepad") 'Lancement de Notepad
PIDMonExe = MonExe.ProcessID

Wscript.echo "PID de l'exe : " &  PIDMonExe

'On attend que le programme soit terminé
Do While MonExe.Status = 0
	WScript.Sleep 1000 'Attente de 1 seconde
Loop

Wscript.echo "Exe terminé"

Set MonExe = Nothing
Set WSHShell = Nothing
Lien vers le fichier : cliquez ici Copier le code

Exemple de lancement d'un programme .exe et affichage immédiat du résultat.
Pour l'exemple nous faisons ici un dir c:\
En adaptant ce script, vous pourrez récupérer le résultat et réagir en fonction

'2015 01 19
'VbScript pour lancer un .exe (et uniquement un .exe)
'Lancez ce .vbs de préférence avec cscript.exe //Nologo
'Ainsi la première ligne récupérée sera la effectivement la première générée par lexe qui sera lancé (et pas autre chose comme "Microsoft (R) Windows Script Host Version 5.8")

Dim WSHShell, ObjExec, Commande, PIDMonExe, UneLigneDeResultat, NumeroLigneResultat

Commande = "cmd.exe /C ""dir c:\""" 'Pour l'exemple on va lancer un "dir c:\"

Set WSHShell = CreateObject("WScript.Shell")
Set ObjExec = WSHShell.Exec(Commande) 'Lancement de l'exe

PIDMonExe = ObjExec.ProcessID 'Récupération du PID de l'exe

'Récupération du résultat affiché par l'exe
NumeroLigneResultat = 0
Do While Not ObjExec.StdOut.AtEndOfStream

	NumeroLigneResultat = NumeroLigneResultat + 1
	UneLigneDeResultat = ObjExec.StdOut.ReadLine() 'On récupère une ligne générée par l'exe
	Wscript.echo UneLigneDeResultat 'On affiche cette ligne

Loop

Wscript.echo "Exe terminé"

Set ObjExec = Nothing
Set WSHShell = Nothing
Lien vers le fichier : cliquez ici Copier le code
Option Explicit
Dim WSHShell, ObjExec, PIDMonExe
Dim vSystemRoot
Dim Commande, UneLigneDeResultat
Redim MonTableauDynamiquePourResultat(0)

Set WSHShell = CreateObject("WScript.Shell")

vSystemRoot = WSHShell.ExpandEnvironmentStrings("%SystemRoot%")
Wscript.echo "vSystemRoot : " &  vSystemRoot

'Commande = vSystemRoot & "\System32\" & "unexe.exe"
Commande = "cmd.exe /C ""dir c:\"""

Set ObjExec = WSHShell.Exec(Commande)
PIDMonExe = ObjExec.ProcessID

Wscript.echo "PID de l'exe : " &  PIDMonExe

Do While Not ObjExec.StdOut.AtEndOfStream

	'On récupère la ligne
	UneLigneDeResultat = ObjExec.StdOut.ReadLine()
	Wscript.echo UneLigneDeResultat
	'LignesTableauResultat = LignesTableauResultat & UneLigneDeResultat & CHR(1)
	
	'Call ObjExec.Terminate()
	'WScript.Sleep 1000 'Attente de 1 seconde

	'If Len(LignesTableauResultat) > 0 Then
		'LignesTableauResultat = Left(LignesTableauResultat, (Len(LignesTableauResultat) - Len(CHR(1))))
	'End If

	'Wscript.echo "Code de sortie : " & ObjExec.ExitCode
	'MonTableauDynamiquePourResultat = Split(LignesTableauResultat, CHR(1))

Loop

'On attend que le programme soit terminé
'Do While ObjExec.Status = 0
	'WScript.Sleep 1000 'Attente de 1 seconde
'Loop

Wscript.echo "Exe terminé"

Set ObjExec = Nothing
Set WSHShell = Nothing
Lien vers le fichier : cliquez ici Copier le code

2