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.Runs an executable program and returns an integer containing the program's process ID if it is still running.

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

Pathname
String

Erforderlich.Required. StringString. Name des auszuführenden Programms zusammen mit allen erforderlichen Argumenten und Befehlszeilenschaltern.Name of the program to execute, together with any required arguments and command-line switches. PathName kann auch das Laufwerk und den Verzeichnispfad bzw. den Ordner beinhalten.PathName can also include the drive and the directory path or folder. Wenn Sie den Pfad zum Programm nicht kennen, können Sie ihn mit GetFiles ermitteln.If you do not know the path to the program, you can use the GetFiles to locate it. 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.For example, you can call My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), which returns the full path of every file named testFile.txt anywhere on drive C:\.

Style
AppWinStyle

Dies ist optional.Optional. AppWinStyleAppWinStyle. Ein aus dem AppWinStyle ausgewählter Wert, der das Format des Fensters angibt, in dem das Programm ausgeführt werden soll.A value chosen from the AppWinStyle specifying the style of the window in which the program is to run. Wenn Style nicht angegeben wird, verwendet ShellAppWinStyle.MinimizedFocus, wodurch das Programm minimiert und mit dem Fokus gestartet wird.If Style is omitted, Shell uses AppWinStyle.MinimizedFocus, which starts the program minimized and with focus.

Wait
Boolean

Dies ist optional.Optional. BooleanBoolean. Ein Wert, der angibt, ob die Shell-Funktion auf den Abschluss des Programms warten soll.A value indicating whether the Shell function should wait for completion of the program. Wenn Wait nicht angegeben wird, verwendet Shell den Wert False.If Wait is omitted, Shell uses False.

Timeout
Int32

Dies ist optional.Optional. IntegerInteger. Die Anzahl von Millisekunden, die auf den Abschluss gewartet werden soll, wenn Wait den Wert True hat.The number of milliseconds to wait for completion if Wait is True. 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.If Timeout is omitted, Shell uses -1, which means there is no timeout and Shell does not return until the program finishes. Wenn Sie daher Timeout nicht angeben oder auf -1 festlegen, ist es möglich, dass Shell die Steuerung niemals an Ihr Programm zurückgibt.Therefore, if you omit Timeout or set it to -1, it is possible that Shell might never return control to your program.

Gibt zurück

Eine ganze Zahl mit der Prozess-ID des Programms, wenn es noch ausgeführt wird.An integer containing the program's process ID if it is still running. 0, wenn das Programm die Ausführung bereits beendet hat.0 if the program already finished executing.

Ausnahmen

Style befindet sich nicht im Bereich von 0 bis einschließlich 9.Style is not within range 0 through 9, inclusive.

Shell kann die Datei PathName nicht finden.Shell cannot find the PathName file.

PathName ist Nothing.PathName is Nothing.

Beispiele

Im folgenden Beispiel wird die Shell-Funktion verwendet, um eine vom Benutzer angegebene Anwendung auszuführen.The following example uses the Shell function to run an application specified by the user. Wenn Sie AppWinStyle.NormalFocus als zweites Argument angeben, wird die Anwendung in normaler Größe geöffnet, und der Fokus wird festgelegt.Specifying AppWinStyle.NormalFocus as the second argument opens the application in normal size and gives it the focus.

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 in PathName benannte Programm noch ausgeführt wird, wenn Shell zurückgibt.The return value of the Shell function depends on whether the program named in PathName is still executing when Shell returns. Wenn Sie Wait auf True festlegen und das Programm beendet wird, bevor das Timeout abläuft, gibt Shell 0 (null) zurück.If you set Wait to True and the program finishes before the timeout expires, Shell returns zero. Wenn das Timeout abläuft, oder wenn Sie Wait weglassen oder auf Falsefestlegen, gibt Shell die Prozess-ID des Programms zurück.If the timeout expires, or if you omit Wait or set it to False, Shell returns the process ID of the program. Die Prozess-ID ist eine eindeutige Zahl, die das laufende Programm identifiziert.The process ID is a unique number that identifies the running program.

Fehler beim StartenFailure to Start

Wenn das benannte Programm von der Shell Funktion nicht gestartet werden kann, tritt ein FileNotFoundException Fehler auf.If the Shell function cannot start the named program, a FileNotFoundException error occurs. Dies kann z. b. der Fall sein, wenn Sie versuchen, ein 16-Bit-Programm, z. b. command.com, aus einer Anwendung mit System.Windows.Formsauszuführen.This can happen, for example, when you attempt to run a 16-bit program, such as command.com, from an application using System.Windows.Forms. Um ein Problem zu umgehen, können Sie ein 32-Bit-Programm ausführen, das das gewünschte 16-Bit-Programm aufruft.For a workaround, you can run a 32-bit program that calls the desired 16-bit program. Im Fall von command.comkönnen Sie cmd.exe als Alternative ausführen.In the case of command.com, you can run cmd.exe as an alternative.

Warten auf AbschlussWaiting for Completion

Die Shell-Funktion führt das Programm standardmäßig asynchron aus.By default, the Shell function runs the program asynchronously. Dies bedeutet, dass ein Programm, das mit der Shell-Funktion gestartet wurde, möglicherweise nicht abgeschlossen wird, bevor die Anweisungen ausgeführt werden, die auf die Shell FunktionThis means that a program started with the Shell function might not finish executing before the statements following the Shell function are executed. Wenn Sie auf das Beenden des Programms warten möchten, bevor Sie den Vorgang fortsetzen, legen Sie Wait auf Truefest.If you want to wait for the program to finish before you continue, set Wait to True.

Bestimmen des ExitcodesDetermining the Exit Code

Ein Prozess kann einen Exitcode zurückgeben, wenn er beendet wird.A process can return an exit code when it terminates. Sie können Shell jedoch nicht verwenden, um diesen Exitcode abzurufen, da Shell 0 (null) zurückgibt, wenn er auf die Beendigung wartet, und auch, weil der Prozess in einem anderen Objekt als Shellausgeführt wird.However, you cannot use Shell to retrieve this exit code, because Shell returns zero if it waits for termination, and also because the process runs in a different object from Shell.

Um den Exitcode von einem Prozess abzurufen, müssen Sie Ihren eigenen Code schreiben, um den Prozess zu initiieren und auf Beendigung zu warten.To retrieve the exit code from a process, you must write your own code to initiate the process and wait for termination. Im folgenden Beispiel wird gezeigt, wie Sie einen Prozess initiieren, warten, bis er beendet wird, und den Exitcode abrufen.The following example shows how to initiate a process, wait for it to terminate, and retrieve its exit code.

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 Datei SpezifikationProtecting the File Specification

Sie sollten den gesamten Pfad und die Datei Spezifikation immer in Anführungszeichen einschließen, wie im folgenden Beispiel gezeigt.You should always enclose the entire path and file specification in quotation marks, as the following example shows.

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

Jedes Paar von angrenzenden doppelten Anführungszeichen (" ") innerhalb des Zeichenfolgenliterals wird als ein doppeltes Anführungszeichen in der Zeichenfolge interpretiert.Each pair of adjacent double quotation marks (" ") within the string literal is interpreted as one double quotation character in the string. Im vorangehenden Beispiel wird daher die folgende Zeichenfolge für die Shell-Funktion angezeigt:Therefore, the preceding example presents the following string to the Shell function:

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

Wenn Sie den Pfad nicht in Anführungszeichen eingeschlossen haben, sucht Windows nach einer Datei namens Program.exe in C:\ anstelle display.exe im Verzeichnis "c:\Program Files".If you did not have the path enclosed in quotation marks, Windows would look for a file called Program.exe in the C:\ directory, instead of display.exe in the C:\Program Files directory.

Wichtig

Wenn Sie den Pfad und die Datei Angabe nicht in Anführungszeichen einschließen, besteht ein Sicherheitsrisiko, wenn der Dateiname oder ein Pfad Knoten Leerzeichen enthält.If you do not enclose the path and file specification in quotation marks, there is a security risk if the file name or a path node contains spaces. Im vorherigen Beispiel enthält der Pfad Knoten \Program Files ein Leerzeichen.In the preceding example, the path node \Program Files includes a space. Wenn die Spezifikation nicht in Anführungszeichen und ein Programm mit dem Namen Program.exe in C:\installiert wurde (z. b. durch illegale Manipulation), würde Windows es anstelle von display.exeausführen.If the specification were not inside quotation marks and a program named Program.exe had been installed in C:\, for example by illicit tampering, Windows would execute it instead of display.exe.

Wichtig

Die Shell-Funktion erfordert die Berechtigung "nicht verwalteter Code", die sich möglicherweise auf die Ausführung in teilweise vertrauenswürdigen Situationen auswirkt.The Shell function requires unmanaged code permission, which might affect its execution in partial-trust situations. Weitere Informationen finden Sie unter SecurityPermission-und Code Zugriffsberechtigungen.For more information, see SecurityPermission and Code Access Permissions.

Gilt für:

Siehe auch