Interaction.Shell(String, AppWinStyle, Boolean, Int32) Methode

Definition

Führt ein ausführbares Programm aus und gibt eine ganze Zahl mit der Prozess-ID des Programms zurück, sofern es noch ausgeführt wird.

public static int Shell (string PathName, Microsoft.VisualBasic.AppWinStyle Style = Microsoft.VisualBasic.AppWinStyle.MinimizedFocus, bool Wait = false, int Timeout = -1);
public static int Shell (string Pathname, Microsoft.VisualBasic.AppWinStyle Style = Microsoft.VisualBasic.AppWinStyle.MinimizedFocus, bool Wait = false, int Timeout = -1);
static member Shell : string * Microsoft.VisualBasic.AppWinStyle * bool * int -> int
static member Shell : string * Microsoft.VisualBasic.AppWinStyle * bool * int -> int
Public Function Shell (PathName As String, Optional Style As AppWinStyle = Microsoft.VisualBasic.AppWinStyle.MinimizedFocus, Optional Wait As Boolean = false, Optional Timeout As Integer = -1) As Integer
Public Function Shell (Pathname As String, Optional Style As AppWinStyle = Microsoft.VisualBasic.AppWinStyle.MinimizedFocus, Optional Wait As Boolean = false, Optional Timeout As Integer = -1) As Integer

Parameter

PathNamePathname
String

Erforderlich. String. Name des auszuführenden Programms zusammen mit allen erforderlichen Argumenten und Befehlszeilenschaltern. PathName kann auch das Laufwerk und den Verzeichnispfad bzw. den Ordner beinhalten.
Wenn Sie den Pfad zum Programm nicht kennen, können Sie ihn mit GetFiles ermitteln. Sie können beispielsweise My.Computer.FileSystem.GetFiles ("C:", TRUE, "testFile.txt") aufrufen, was den vollständigen Pfad jeder Datei mit dem Namen testFile.txt zurückgibt, die sich an beliebiger Stelle auf Laufwerk C:\ befindet.

Style
AppWinStyle

Dies ist optional. AppWinStyle. Ein aus dem AppWinStyle ausgewählter Wert, der das Format des Fensters angibt, in dem das Programm ausgeführt werden soll. Wenn Style nicht angegeben wird, verwendet ShellAppWinStyle.MinimizedFocus, wodurch das Programm minimiert und mit dem Fokus gestartet wird.

Wait
Boolean

Dies ist optional. Boolean. Ein Wert, der angibt, ob die Shell-Funktion auf den Abschluss des Programms warten soll. Wenn Wait nicht angegeben wird, verwendet Shell den Wert False.

Timeout
Int32

Dies ist optional. Integer. Die Anzahl von Millisekunden, die auf den Abschluss gewartet werden soll, wenn Wait den Wert True hat. Wenn Timeout nicht angegeben wird, verwendet Shell den Wert -1. Das bedeutet, dass es kein Timeout gibt und eine Rückgabe von Shell erst nach Beendigung des Programms erfolgt. Wenn Sie daher Timeout nicht angeben oder auf -1 festlegen, ist es möglich, dass Shell die Steuerung niemals an Ihr Programm zurückgibt.

Gibt zurück

Int32

Eine ganze Zahl mit der Prozess-ID des Programms, wenn es noch ausgeführt wird. 0, wenn das Programm die Ausführung bereits beendet hat.

Ausnahmen

Style befindet sich nicht im Bereich von 0 bis einschließlich 9.

Shell kann die Datei PathName nicht finden.

PathName ist Nothing.

Beispiele

Im folgenden Beispiel wird die Funktion verwendet, um eine anwendung auszuführen, die Shell vom Benutzer angegeben wird. Wenn Das zweite Argument die Anwendung in normaler Größe angibt AppWinStyle.NormalFocus , wird der Fokus angezeigt.

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.

Hinweise

Der Rückgabewert der Shell Funktion hängt davon ab, ob das Programm, das beim Zurückgeben benannt PathName ist, weiterhin ausgeführt Shell wird. Wenn Sie auf True das Programm festgelegt Wait und das Programm abgeschlossen ist, bevor das Timeout abläuft, Shell wird null zurückgegeben. Wenn das Timeout abläuft, oder wenn Sie Wait ihn Falseauslassen oder auf festlegen, Shell gibt die Prozess-ID des Programms zurück. Die Prozess-ID ist eine eindeutige Zahl, die das ausgeführte Programm identifiziert.

Fehler beim Starten

Wenn die Funktion das Shell benannte Programm nicht starten kann, tritt ein FileNotFoundException Fehler auf. Dies kann beispielsweise passieren, wenn Sie versuchen, ein 16-Bit-Programm auszuführen, z command.com. B. aus einer Anwendung mithilfe System.Windows.Formseiner Anwendung. Für eine Problemumgehung können Sie ein 32-Bit-Programm ausführen, das das gewünschte 16-Bit-Programm aufruft. Im Fall von command.com, können Sie als Alternative ausführen cmd.exe .

Warten auf Abschluss

Standardmäßig wird das Shell Programm asynchron ausgeführt. Dies bedeutet, dass ein Programm, das mit der Shell Funktion gestartet wurde, möglicherweise nicht ausgeführt wird, bevor die Anweisungen nach der Shell Funktion ausgeführt werden. Wenn Sie darauf warten möchten, dass das Programm fertig ist, bevor Sie fortfahren, legen Wait Sie auf True".

Bestimmen des Exit-Codes

Ein Prozess kann einen Exitcode zurückgeben, wenn er beendet wird. Sie können diesen Exitcode jedoch nicht Shell abrufen, da Shell null zurückgegeben wird, wenn er auf die Beendigung wartet, und auch, weil der Prozess in einem anderen Objekt Shellausgeführt wird.

Um den Exitcode aus einem Prozess abzurufen, müssen Sie Ihren eigenen Code schreiben, um den Prozess zu initiieren und auf die Beendigung zu warten. Im folgenden Beispiel wird gezeigt, wie Sie einen Prozess initiieren, warten, bis sie beendet werden soll, und rufen Sie den Exitcode ab.

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))  

Schützen der Dateispezifikation

Sie sollten immer den gesamten Pfad und die Dateispezifikation in Anführungszeichen einschließen, wie das folgende Beispiel zeigt.

ID = Shell("""C:\Program Files\display.exe"" -a -q", , True, 100000)  

Jedes paar benachbarte doppelte Anführungszeichen (" ") innerhalb der Zeichenfolgen literal wird als ein doppeltes Anführungszeichen in der Zeichenfolge interpretiert. Daher stellt das vorherige Beispiel die folgende Zeichenfolge für die Shell Funktion dar:

"C:\Program Files\display.exe" -a -q  

Wenn Sie den Pfad nicht in Anführungszeichen eingeschlossen haben, würde Windows nach einer Datei suchen, die im C:\ aufgerufen Program.exe wird. verzeichnis anstelle display.exe des Verzeichnisses "C:\Program Files".

Wichtig

Wenn Sie den Pfad und die Dateispezifikation nicht in Anführungszeichen einschließen, besteht ein Sicherheitsrisiko, wenn der Dateinamen oder ein Pfadknoten Leerzeichen enthält. Im vorherigen Beispiel enthält der Pfadknoten \Program Files einen Leerzeichen. Wenn die Spezifikation nicht innerhalb von Anführungszeichen und ein Programm mit dem Program.exe Namen C:\installiert wurde, z. B. durch illegale Manipulationen, Windows sie anstelle von display.exe.

Wichtig

Die Shell Funktion erfordert nicht verwaltete Codeberechtigungen, die sich auf die Ausführung in teilvertrauenswürdigen Situationen auswirken können. Weitere Informationen finden Sie unter SecurityPermission und Codezugriffsberechtigungen.

Gilt für:

Siehe auch