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 z. B. aufrufen My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), was den vollständigen Pfad jeder Datei mit dem Namen testFile.txt an einer beliebigen Stelle auf Laufwerk C:\ zurückgibt.

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

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 Shell -Funktion verwendet, um eine vom Benutzer angegebene Anwendung auszuführen. Die Angabe AppWinStyle.NormalFocus als zweites Argument öffnet die Anwendung in normaler Größe und gibt ihr den Fokus.

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 mit dem Namen in PathName noch ausgeführt wird, wenn Shell es zurückgibt. Wenn Sie auf True festlegen Wait und das Programm abgeschlossen wird, bevor das Timeout abläuft, Shell wird null zurückgegeben. Wenn das Timeout abläuft oder Sie es auslassen Wait oder auf Falsefestlegen, Shell gibt die Prozess-ID des Programms zurück. Die Prozess-ID ist eine eindeutige Nummer, die das ausgeführte Programm identifiziert.

Fehler beim Starten

Wenn die Shell Funktion das benannte Programm nicht starten kann, tritt ein Fehler auf FileNotFoundException . Dies kann z. B. der Fall sein, wenn Sie versuchen, ein 16-Bit-Programm wie aus command.comeiner Anwendung mit System.Windows.Formsauszuführen. 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.comkönnen Sie alternativ ausführen cmd.exe .

Warten auf den Abschluss

Standardmäßig führt die Shell Funktion das Programm asynchron aus. Dies bedeutet, dass ein Programm, das mit der Shell -Funktion gestartet wurde, möglicherweise nicht abgeschlossen wird, bevor die Anweisungen nach der Shell Funktion ausgeführt werden. Wenn Sie warten möchten, bis das Programm abgeschlossen ist, bevor Sie fortfahren, legen Sie auf fest WaitTrue.

Bestimmen des Exitcodes

Ein Prozess kann einen Exitcode zurückgeben, wenn er beendet wird. Sie können jedoch nicht verwenden Shell , um diesen Exitcode abzurufen, da Shell null zurückgegeben wird, wenn er auf die Beendigung wartet, und auch, weil der Prozess in einem anderen -Objekt als 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 er beendet wird, und wie der Zugehörige Exitcode abgerufen wird.

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 im folgenden Beispiel gezeigt.

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

Jedes Paar benachbarter doppelter Anführungszeichen (" ") innerhalb des Zeichenfolgenliterals wird als ein doppeltes Anführungszeichen in der Zeichenfolge interpretiert. Daher wird der Funktion im vorherigen Beispiel die Shell folgende Zeichenfolge angezeigt:

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

Wenn der Pfad nicht in Anführungszeichen eingeschlossen ist, sucht Windows nach einer Datei namens Program.exe im Verzeichnis C:\und nicht display.exe im Verzeichnis C:\Programme.

Wichtig

Wenn Sie die Pfad- und Dateispezifikation nicht in Anführungszeichen einschließen, besteht ein Sicherheitsrisiko, wenn der Dateiname oder ein Pfadknoten Leerzeichen enthält. Im vorherigen Beispiel enthält der Pfadknoten \Program Files ein Leerzeichen. Wenn sich die Spezifikation nicht in Anführungszeichen befindet und ein Programm namens Program.exe in C:\ installiert worden wäre, z. B. durch unerlaubte Manipulation, würde Windows sie anstelle von display.exeausführen.

Wichtig

Die Shell Funktion erfordert eine nicht verwaltete Codeberechtigung, die sich in teilweise vertrauenswürdigen Situationen auf die Ausführung auswirken kann. Weitere Informationen finden Sie unter SecurityPermission und Codezugriffsberechtigungen.

Gilt für:

Weitere Informationen