Shell-Funktion

Aktualisiert: November 2007

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

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

Parameter

  • PathName
    Erforderlich. String. Name des auszuführenden Programms zusammen mit allen erforderlichen Argumenten und Befehlszeilenschaltern. PathName kann auch den Laufwerkspfad oder -ordner und den Verzeichnispfad enthalten.

    Wenn Sie den Pfad zum Programm nicht kennen, können Sie ihn mit der My.Computer.FileSystem.GetFiles-Methode ermitteln. Sie können zum Beispiel My.Computer.FileSystem.GetFiles("C:\", True, "testFile.txt") aufrufen, das den vollständigen Pfad aller Dateien mit dem Namen testFile.txt an einem beliebigen Speicherort auf Laufwerk C:\ zurückgibt.

  • Style
    Optional. AppWinStyle. Ein aus der AppWinStyle-Enumeration ausgewählter Wert, der das Format des Fensters angibt, in dem das Programm ausgeführt werden soll. Wenn Style ausgelassen wird, verwendet Shell den Wert AppWinStyle.MinimizedFocus, der das Programm minimiert und mit Fokus startet.

  • Wait
    Optional. Boolean. Ein Wert, der angibt, ob die Shell-Funktion auf die Beendigung des Programms warten soll. Wenn Wait weggelassen wird, verwendet Shell den Wert False.

  • Timeout
    Optional. Integer. Die Zeit in Millisekunden, während der auf den Abschluss gewartet wird, wenn Wait den Wert True aufweist. Wenn Timeout weggelassen wird, verwendet Shell den Wert -1. Dies bedeutet, dass es kein Timeout gibt und dass Shell die Steuerung erst zurückgibt, nachdem das Programm beendet wurde. Wenn Sie Timeout weglassen oder auf -1 festlegen, kann es daher sein, dass Shell die Steuerung niemals an Ihr Programm zurückgibt.

Ausnahmen

Ausnahmetyp

Fehlernummer

Bedingung

ArgumentException

5

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

FileNotFoundException

53

Shell kann die Datei PathName nicht finden.

NullReferenceException

91

PathName hat den Wert Nothing.

Beachten Sie die Spalte "Fehlernummer", wenn Sie Visual Basic 6.0-Anwendungen aktualisieren, die eine unstrukturierte Fehlerbehandlung verwenden. (Sie können die Fehlernummer mit der Number-Eigenschaft (Err-Objekt) vergleichen.) Wenn möglich, sollten Sie jedoch erwägen, eine solche Fehlersteuerung durch eine Übersicht über die strukturierte Ausnahmebehandlung für Visual Basic zu ersetzen.

Hinweise

Der Rückgabewert der Shell-Funktion ist davon abhängig, ob das unter PathName angegebene Programm noch ausgeführt wird, wenn die Shell-Funktion einen Wert zurückgibt. Wenn Sie Wait auf True festlegen und das Programm vor Ablauf des Timeouts endet, gibt Shell 0 (null) zurück. Wenn das Timeout abläuft oder kein Wert bzw. False für Wait festgelegt wird, gibt Shell die Prozess-ID des Programms zurück. Die Prozess-ID ist eine Zahl, die das ausgeführte Programm eindeutig identifiziert.

Starten nicht möglich

Wenn die Shell-Funktion das genannte Programm nicht starten kann, tritt ein FileNotFoundException-Fehler auf. Dies ist z. B. der Fall, wenn Sie ein 16-Bit-Programm wie command.com mit System.Windows.Forms von einer Anwendung aus auszuführen versuchen. Sie können das Problem umgehen, indem Sie ein 32-Bit-Programm ausführen, das das gewünschte 16-Bit-Programm aufruft. Im genannten Beispiel von command.com können Sie alternativ cmd.exe ausführen.

Warten auf den Abschluss

Die Shell-Funktion führt das Programm standardmäßig asynchron aus. Das bedeutet, dass ein mit der Shell-Funktion gestartetes Programm möglicherweise noch nicht beendet ist, wenn die Anweisungen, die der Shell-Funktion nachfolgen, ausgeführt werden. Wenn das Programm beendet sein soll, bevor Sie fortfahren, legen Sie für Wait den Wert True fest.

Festlegen des Exitcodes

Ein Prozess kann einen Exitcode zurückgeben, wenn er beendet wird. Allerdings kann Shell nicht zum Abrufen dieses Exitcodes verwendet werden, weil Shell 0 (null) zurückgibt, wenn es auf einen Abschluss wartet, und weil der Prozess in einem anderen Objekt als Shell ausgeführt wird.

Um den Exitcode eines Prozesses abzurufen, müssen Sie eigenen Code schreiben, mit dem der Prozess eingeleitet wird und zum Warten bis auf den Abschluss angewiesen wird. Im folgenden Beispiel wird gezeigt, wie ein Prozess initiiert, auf seinen Abschluss gewartet und sein 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

Schreiben Sie die gesamte Pfad- und Dateiangabe stets zwischen Anführungszeichen, wie im folgenden Beispiel gezeigt.

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

Die einzelnen Paare von aufeinander folgenden doppelten Anführungszeichen (" ") im Zeichenfolgenliteral werden als ein doppeltes Anführungszeichen in der Zeichenfolge interpretiert. Demnach wird im vorherigen Beispiel folgende Zeichenfolge an die Shell-Funktion übergeben:

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

Wenn Sie den Pfad nicht in Anführungszeichen setzen, sucht Windows im Verzeichnis C:\ nach der Datei Program.exe und nicht im Verzeichnis C:\Programme nach der Datei display.exe.

Sicherheitshinweis:

Wenn Sie die Pfad- und Dateiangabe nicht zwischen Anführungszeichen schreiben, hat dies ein Sicherheitsrisiko zur Folge, wenn der Dateiname oder ein Knoten des Pfads Leerzeichen enthält. Im obigen Beispiel enthält der Pfadknoten \Program Files ein Leerzeichen. Steht die Pfadangabe nicht in Anführungszeichen und ist im Verzeichnis C:\ das Programm Program.exe installiert (möglicherweise versehentlich), führt Windows statt display.exe dieses Programm aus.

Sicherheitshinweis:

Die Shell-Funktion erfordert eine Berechtigung für nicht verwalteten Code. Dies könnte sich auf ihre Ausführung in teilweise vertrauenswürdigen Kontexten auswirken. Weitere Informationen finden Sie unter SecurityPermission und Codezugriffsberechtigungen.

Beispiel

Im folgenden Beispiel wird die Shell-Funktion verwendet, um eine vom Benutzer festgelegte Anwendung zu starten. Wenn Sie AppWinStyle.NormalFocus als zweites Argument angeben, wird die Anwendung in normaler Größe und mit 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 für Entwickler intelligenter Geräte

Diese Funktion wird nicht unterstützt.

Anforderungen

Namespace:Microsoft.VisualBasic

**Modul:**Interaction

**Assembly:**Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)

Siehe auch

Referenz

AppWinStyle-Enumeration

ArgumentException

FileNotFoundException

NullReferenceException

My.Computer.FileSystem.GetFiles-Methode

AppActivate-Funktion