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

Definicja

Uruchamia program wykonywalny i zwraca liczbę całkowitą zawierającą identyfikator procesu programu, jeśli jest on nadal uruchomiony.

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

Parametry

PathNamePathname
String

Wymagane. String. Nazwa programu do wykonania wraz z dowolnymi wymaganymi argumentami i przełącznikami wiersza polecenia. PathName może również zawierać dysk i ścieżkę katalogu lub folder.
Jeśli nie znasz ścieżki do programu, możesz użyć polecenia GetFiles , aby go zlokalizować. Można na przykład wywołać metodę My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), która zwraca pełną ścieżkę każdego pliku o nazwie testFile.txt w dowolnym miejscu na dysku C:\.

Style
AppWinStyle

Opcjonalny. AppWinStyle. Wartość wybrana z AppWinStyle określania stylu okna, w którym ma zostać uruchomiony program. Jeśli Style zostanie pominięty, Shell użyj polecenia AppWinStyle.MinimizedFocus, który uruchamia program zminimalizowany i z fokusem.

Wait
Boolean

Opcjonalny. Boolean. Wartość wskazująca Shell , czy funkcja powinna czekać na ukończenie programu. Jeśli Wait zostanie pominięty, Shell użyj polecenia False.

Timeout
Int32

Opcjonalny. Integer. Liczba milisekund oczekiwania na ukończenie, jeśli Wait ma wartość True. Jeśli Timeout zostanie pominięty, Shell zostanie użyta wartość -1, co oznacza, że nie ma limitu czasu i Shell nie zostanie zwrócony do momentu zakończenia programu. W związku z tym, jeśli pominięto Timeout lub ustawisz go na -1, możliwe, że Shell nigdy nie powrócisz kontroli do programu.

Zwraca

Liczba całkowita zawierająca identyfikator procesu programu, jeśli jest nadal uruchomiona. 0, jeśli program zakończył już wykonywanie.

Wyjątki

Style nie mieści się w zakresie od 0 do 9 włącznie.

Shell Program nie może odnaleźć PathName pliku.

PathName to Nothing.

Przykłady

W poniższym przykładzie użyto Shell funkcji , aby uruchomić aplikację określoną przez użytkownika. Określenie AppWinStyle.NormalFocus jako drugi argument otwiera aplikację w normalnym rozmiarze i nadaje jej 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.

Uwagi

Wartość zwracana Shell funkcji zależy od tego, czy program o nazwie in PathName jest nadal wykonywany po Shell powrocie. Jeśli ustawisz wartość Wait i True program zakończy się przed upływem limitu czasu, Shell funkcja zwróci zero. Jeśli limit czasu wygaśnie lub jeśli pominięto lub ustawisz Wait go na False, Shell zwraca identyfikator procesu programu. Identyfikator procesu jest unikatowym numerem identyfikującym uruchomiony program.

Błąd przy uruchomieniu

Shell Jeśli funkcja nie może uruchomić nazwanego programu, FileNotFoundException wystąpi błąd. Może się to zdarzyć, na przykład podczas próby uruchomienia 16-bitowego programu, takiego jak command.com, z aplikacji przy użyciu polecenia System.Windows.Forms. Aby obejść ten problem, można uruchomić 32-bitowy program, który wywołuje żądany program 16-bitowy. W przypadku command.comprogramu można uruchomić cmd.exe program jako alternatywę.

Oczekiwanie na ukończenie

Domyślnie Shell funkcja uruchamia program asynchronicznie. Oznacza to, że program uruchomiony z funkcją Shell może nie zakończyć wykonywania przed wykonaniem instrukcji po Shell funkcji. Jeśli chcesz poczekać na zakończenie programu przed kontynuowaniem, ustaw wartość WaitTrue.

Określanie kodu wyjścia

Proces może zwrócić kod zakończenia po zakończeniu. Nie można jednak użyć Shell polecenia , aby pobrać ten kod zakończenia, ponieważ Shell zwraca wartość zero, jeśli oczekuje na zakończenie, a także dlatego, że proces jest uruchamiany w innym obiekcie niż Shell.

Aby pobrać kod zakończenia z procesu, musisz napisać własny kod, aby zainicjować proces i poczekać na zakończenie. W poniższym przykładzie pokazano, jak zainicjować proces, poczekać na zakończenie i pobrać kod zakończenia.

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

Ochrona specyfikacji pliku

Należy zawsze ująć całą ścieżkę i specyfikację pliku w cudzysłów, jak pokazano w poniższym przykładzie.

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

Każda para sąsiednich podwójnych cudzysłowów (" ") w literale ciągu jest interpretowana jako jeden podwójny znak cudzysłowu w ciągu. W związku z tym powyższy przykład przedstawia następujący ciąg Shell funkcji:

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

Jeśli nie masz ścieżki ujętej w cudzysłów, system Windows wyszuka plik o nazwie Program.exe w katalogu C:\ zamiast display.exe w katalogu C:\Program Files.

Ważne

Jeśli ścieżka i specyfikacja pliku nie są ujęte w znaki cudzysłowu, istnieje ryzyko bezpieczeństwa, jeśli nazwa pliku lub węzeł ścieżki zawiera spacje. W poprzednim przykładzie węzeł \Program Files ścieżki zawiera spację. Gdyby specyfikacja nie znajdowała się wewnątrz cudzysłowów, a program o nazwie Program.exe został zainstalowany w katalogu C:\, na przykład przez nielegalne manipulowanie, system Windows wykona go zamiast display.exe.

Ważne

Funkcja Shell wymaga niezarządzanych uprawnień kodu, które mogą mieć wpływ na jej wykonywanie w sytuacjach częściowego zaufania. Aby uzyskać więcej informacji, zobacz SecurityPermission i Uprawnienia dostępu do kodu.

Dotyczy

Zobacz też