Rubrique précédente: Delay ou Sleep – Attendre l'exécution du scriptRubrique suivante: Exit – Quitter le script


Exec ou Execute – Exécuter une application

Valide sur les plates-formes NetWare, Symbian OS, UNIX, Windows et Windows CE

La fonction Exec ou Execute renvoie l'application indiquée.

Format de la fonction :

Execute(cmdline as String, wait as Boolean, style as Integer) as Integer 
Execute(cmdline as String, wait as Boolean) as Integer
Execute(cmdline as String) as Integer
cmdline

Identifie la ligne de commande (nom de fichier et paramètres facultatifs).

Remarque : Sur les plates-formes Windows, si le fichier à exécuter ne comporte pas l'extension .exe, vous devez indiquer clairement l'extension de fichier. Par exemple, sous Win9x, saisissez command.com au lieu de command.

wait

Indique si le script attend que l'application soit terminée. (Windows uniquement)

style

Indique le style de fenêtre de l'application. (Windows uniquement)

Remarque : Si une commande de la ligne de commande contient un espace, insérez-la entre guillemets. Par exemple : Execute("""\temp 1\prgedit.exe""",true,0).

Le paramètre wait indique si la fonction doit renvoyer à l'exécution du script sans attendre la fin de l'application. La valeur True force la fonction à attendre l'arrêt de l'application. La valeur par défaut est : True

Sous UNIX, les paramètres wait et style sont ignorés. La fonction attend toujours que l'application soit arrêtée avant de revenir à l'exécution du script.

Le paramètre style détermine l'affichage de la fenêtre principale d'une application sous Windows. Ce paramètre peut être l'une des valeurs suivantes :

Valeur : 0

Masque la fenêtre et transmet l'activation à une autre fenêtre.

Valeur : 1

Active une fenêtre et l'affiche selon sa taille et sa position par défaut. Il s'agit du paramètre par défaut.

Valeur : 2

Active une fenêtre et l'affiche sous la forme d'une icône.

Valeur : 3

Active une fenêtre et l'affiche sous la forme d'une fenêtre agrandie.

Valeur : 7

Affiche une fenêtre sous la forme d'une icône. La fenêtre actuelle demeure active.

Sous Windows, en cas de réussite de la fonction, un code de retour non négatif indique le code de retour de la commande spécifiée, appelée par la fonction execute(). Si l'interpréteur ne parvient pas à lancer la commande, les codes de retour suivants indiquent le problème :

Code de retour : -1

Le système manque de mémoire ou de ressources.

Code de retour : -2

Le fichier spécifié est introuvable.

Code de retour : -3

Le chemin indiqué est introuvable.

Code de retour : -4

Le fichier .exe n'est pas valide.

Code de retour : -5

Erreur inconnue.

Sous UNIX, la fonction système system() appelle la commande spécifiée. Par conséquent, le code renvoyé correspond au code de retour de system(). En d'autres termes, lorsque la fonction system() échoue, elle renvoie -1. Lorsque la fonction system() s'exécute sans erreur, la valeur renvoyée correspond au format de code de retour waitpid(). Un script doit analyser le code de retour afin de déterminer la réussite ou l'échec des commandes appelées. Vous pouvez utiliser pour cela les fonctions suivantes :

'
' Execute() prise en charge de l'évaluation du code de retour pour Unix
'
 
' ******************************************************************************************************
'
' Nom
'   DMS_ExecExit(retVal As Integer) As Boolean
'
' Description
'   Détermine si le processus démarré par Execute() s'est terminé normalement ou non.
'
' Arguments
'   retVal	code de retour à évaluer
'
' Renvoie
'   True	en cas de fin normale
'   FALSE	dans le cas contraire.
'
' Commentaire
'  La fonction correspond à la description waitpid(5) de la macro WIFEXITED
'	#define WIFEXITED(stat)     ((int)((stat)&0xFF) == 0)
'
Function DMS_ExecExit(retVal As Integer) As Boolean
	If (retVal And 255) Then
		DMS_ExecExit = FALSE
	Else
		DMS_ExecExit = True
	End If
End Function
 
' ******************************************************************************************************
'
' Nom
'   DMS_ExecExitStatus(retVal As Integer) As Integer
'
' Description
'   Détermine le code de fin shell à partir de la valeur renvoyée par l'appel de Execute(), c'est-à-dire le code renvoyé par 
'   le processus appelé.
'
' Arguments
'   retVal	Code de retour renvoyé par Execute()
'
' Renvoie
'   Si la commande Execute() s'est terminée de façon normale, le statut de l'enfant est renvoyé, sinon 
'   retVal est renvoyé.
'
' Commentaire
'  La fonction correspond à la description waitpid(5) de la macro WEXITSTATUS
'	#define WEXITSTATUS(stat)   ((int)(((stat)>>8)&0xFF))
'
Function DMS_ExecExitStatus(retVal As Integer) As Integer
	If Not(DMS_ExecExit(retVal)) Then
		DMS_ExecExitStatus = retVal
	Else
		DMS_ExecExitStatus = retVal / 256
		DMS_ExecExitStatus = DMS_ExecExitStatus And 255
	End If
End Function

Si la fonction réussit, la valeur de retour n'est pas négative (le code de sortie de l'application lorsque WAIT indique que la fonction doit attendre l'arrêt de l'application). Dans le cas contraire, la fonction renvoie l'un des numéros d'erreur suivants :

Valeur : -1

Le système manque de mémoire ou de ressources.

Valeur : -2

Le fichier spécifié est introuvable.

Valeur : -3

Le chemin indiqué est introuvable.

Valeur : -4

Le fichier .exe n'est pas valide.

Valeur : -5

Erreur inconnue.

Exemple :

Dim Tempname as string  ' Contient le nom du fichier temporaire
Dim hFile as integer   ' Descripteur du fichier temporaire

' D'abord, obtenez un nom de fichier temporaire, puis créez le fichier...
Tempname=EnvGetString("TEMP")
if TempName="" then
	TempName="MonFichier.txt"
else
	Tempname=Tempname+"\MonFichier.txt"
end if
hfile=CreateFile(Tempname)

if hFile<0 then
	 ' Une erreur s'est produite lors de la création du fichier. Informez l'utilisateur et quittez l'application.
	 MsgBox("Impossible de créer le fichier temporaire...")
	 goto end
end if

' Stockez du texte dans le fichier et fermez-le...
WriteFile(hFile,"Ce texte est affiché à l'aide du Bloc-notes")
WriteFile(hFile,"")
WriteFile(hFile,"Veuillez quitter le Bloc-notes pour reprendre l'exécution du script")
Closefile(hFile)

'Lancez le Bloc-notes avec le fichier...
if Execute("notepad "+Tempname,True)<0 then MsgBox("Impossible de démarrer le Bloc-notes...")

'N'oubliez pas d'effacer le fichier temporaire avant de quitter l'application...
DeleteFile(Tempname)

end: