Shell, fonction
Mise à jour : novembre 2007
Exécute un programme exécutable et retourne un entier contenant l'ID du processus du programme s'il est toujours en cours d'exécution.
Public Function Shell( _
ByVal PathName As String, _
Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus, _
Optional ByVal Wait As Boolean = False, _
Optional ByVal Timeout As Integer = -1 _
) As Integer
Paramètres
PathName
Requis. String.Nom du programme à exécuter avec n'importe quel argument requis et commutateur de ligne de commande. PathName peut également inclure le lecteur et le chemin d'accès ou au répertoire ou le dossier.Si vous ne connaissez pas le chemin d'accès au programme, vous pouvez utiliser le My.Computer.FileSystem.GetFiles, méthode pour le rechercher. Par exemple, vous pouvez appeler My.Computer.FileSystem.GetFiles("C:\", True, "testFile.txt") qui retourne le chemin d'accès complet de chaque fichier nommé testFile.txt sur le lecteur C:\.
Style
Facultatif. AppWinStyle. Valeur choisie à partir du AppWinStyle, énumération spécifiant le style de la fenêtre dans laquelle le programme doit être exécuté. Si Style est omis, Shell utilise AppWinStyle.MinimizedFocus qui démarre le programme réduit et avec un focus.Wait
Facultatif. Boolean. Valeur indiquant si la fonction Shell doit attendre la fin du programme. Si Wait est omis, Shell a la valeur False.Timeout
Facultatif. Integer. Temps en millisecondes à attendre jusqu'à la fin si Wait a la valeur True. Si Timeout est omis, Shell utilise -1 ; il n'y a donc aucun délai et Shell ne retourne aucune valeur jusqu'à la fin du programme. Ainsi, si vous omettez Timeout ou lui affecter la valeur -1, il est possible que Shell ne retourne jamais le contrôle dans votre programme.
Exceptions
Type d'exception |
Numéro de l'erreur |
Condition |
---|---|---|
Style se trouve en dehors de la plage de 0 à 9 compris. |
||
Shell ne peut pas trouver le fichier PathName. |
||
PathName est Nothing. |
Consultez la colonne « Numéro d'erreur » si vous mettez à niveau des applications Visual Basic 6.0 qui utilisent la gestion non structurée des erreurs. (Vous pouvez comparer le numéro d'erreur par rapport à Number, propriété (objet Err).) Toutefois, lorsque cela est possible, vous devez envisager de remplacer un tel contrôle d'erreur par Vue d'ensemble de la gestion structurée des exceptions pour Visual Basic.
Notes
La valeur de retour de la fonction Shell varie selon que le programme nommé dans PathName est en cours d'exécution lorsque Shell retourne une valeur. Si vous affectez la valeur True à Wait et que le programme se termine avant l'expiration du délai, Shell retourne zéro. Si le délai expire, si vous omettez Wait ou lui affectez la valeur False, Shell retourne l'ID de processus du programme. L'ID du processus est un nombre unique qui identifie le programme en cours d'exécution.
Échec de démarrage
Si la fonction Shell ne peut pas démarrer le programme nommé, une erreur FileNotFoundException se produit. Par exemple, cette erreur peut arriver lorsque vous essayez d'exécuter un programme 16 bits, tel que command.com, à partir d'une application à l'aide de System.Windows.Forms. Pour résoudre cette erreur, vous pouvez exécuter un programme 32 bits qui appelle le programme 16 bits souhaité. Dans le cas de command.com, vous pouvez également exécuter cmd.exe.
En attente de la conclusion
Par défaut, la fonction Shell exécute le programme de manière asynchrone. Cela signifie qu'un programme lancé par la fonction Shell peut ne pas s'exécuter complètement avant que les instructions qui suivent la fonction Shell ne soient exécutées. Si vous souhaitez attendre la fin du programme avant de continuer, vous devez affecter la valeur True à Wait.
Détermination du code de sortie
Un processus peut retourner un code de sortie lorsqu'il se termine. Toutefois, vous ne pouvez pas utiliser Shell pour récupérer ce code de sortie, parce que Shell retourne zéro s'il attend la conclusion et que le processus s'exécute dans un objet différent de Shell.
Pour récupérer le code de sortie d'un processus, vous devez écrire votre code utilisateur pour initialiser le processus et attendre la conclusion. L'exemple suivant montre comment initialiser un processus, attendre sa conclusion et récupérer son code de sortie.
Dim procID As Integer
Dim newProc As Diagnostics.Process
newProc = Diagnostics.Process.Start("C:\WINDOWS\NOTEPAD.EXE")
procID = newProc.Id
newProc.WaitForExit()
Dim procEC As Integer = -1
If newProc.HasExited Then
procEC = newProc.ExitCode
End If
MsgBox("Process with ID " & CStr(ProcID) & _
" terminated with exit code " & CStr(procEC))
Protection de la spécification de fichier
Vous devez toujours mettre l'intégralité du chemin d'accès et la spécification de fichiers entre guillemets, comme le montre l'exemple suivant :
ID = Shell("""C:\Program Files\display.exe"" -a -q", , True, 100000)
Chaque paire de guillemets doubles adjacents (" ") dans le littéral de chaîne est interprétée comme un caractère de guillemet double dans la chaîne. Ainsi, l'exemple précédent présente la chaîne suivante à la fonction Shell :
"C:\Program Files\display.exe" -a -q
Si le chemin d'accès n'est pas placé entre guillemets, Windows recherche un fichier appelé Program.exe dans le répertoire C:\, au lieu du fichier display.exe dans le répertoire C:\Program Files.
Note de sécurité : |
---|
Si vous ne placez pas le chemin d'accès et la spécification de fichier entre guillemets, un problème de sécurité risque de se poser si le nom du fichier ou le nœud du chemin contient des espaces. Dans l'exemple précédent, le nœud de chemin \Program Files inclut un espace. Si la spécification n'est pas entre guillemets et qu'un programme appelé Program.exe n'est pas installé dans C:\ (par intrusion illicite par exemple), Windows l'exécute à la place de display.exe. |
Note de sécurité : |
---|
La fonction Shell nécessite une permission de code non managée, qui peut affecter son exécution dans les situations d'un niveau de confiance partiel. Pour plus d'informations, consultez SecurityPermission et Autorisations d'accès du code. |
Exemple
L'exemple suivant utilise la fonction Shell pour exécuter une application spécifiée par l'utilisateur. Si AppWinStyle.NormalFocus est spécifié en tant que second argument, l'application est activée et affichée sous sa taille normale.
Dim procID As Integer
' Run calculator.
procID = Shell("C:\Windows\system32\calc.exe", AppWinStyle.NormalFocus)
' The preceding path is for Windows XP.
' The Windows 2000 path is C:\WINNT\system32\calc.exe.
Notes du développeur sur Smart Device
Cette fonction n'est pas prise en charge.
Configuration requise
Espace de noms :Microsoft.VisualBasic
**Module :**Interaction
**Assembly :**bibliothèque Visual Basic Runtime (dans Microsoft.VisualBasic.dll)