Interaction.Shell(String, AppWinStyle, Boolean, Int32) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 Shell
AppWinStyle.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 False
festlegen, 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.com
einer 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.com
kö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 Wait
True
.
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 Shell
ausgefü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.exe
ausfü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.