Interaction.Shell(String, AppWinStyle, Boolean, Int32) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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.com
programu 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ść Wait
True
.
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.