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

Definice

Spustí spustitelný program a vrátí celé číslo obsahující ID procesu programu, pokud je stále spuštěné.

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

Required. String. Název programu, který se má provést, spolu s libovolnými požadovanými argumenty a přepínači příkazového řádku. PathName může také obsahovat jednotku a cestu k adresáři nebo složku. Pokud neznáte cestu k programu, můžete ji najít pomocí GetFiles příkazu. Můžete například volat My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), která vrátí úplnou cestu ke každému souboru pojmenovaného testFile.txt kdekoli na jednotce C:\.

Style
AppWinStyle

Optional. AppWinStyle. Hodnota zvolená z AppWinStyle určení stylu okna, ve kterém má program běžet. Pokud Style je vynechán, Shell použije , AppWinStyle.MinimizedFocuskterý spustí program minimalizovaný a s fokusem.

Wait
Boolean

Optional. Boolean. Hodnota označující, zda Shell má funkce čekat na dokončení programu. Pokud Wait je vynechán, Shell použije False.

Timeout
Int32

Optional. Integer. Počet milisekund, které mají čekat na dokončení, pokud Wait je True. Pokud Timeout tento parametr vynecháte, Shell použije hodnotu -1, což znamená, že neexistuje časový limit a Shell nevrátí se, dokud se program nedokončí. Proto pokud ho vynecháte Timeout nebo nastavíte na hodnotu -1, je možné, že Shell se do programu nikdy nevrátí řízení.

Návraty

Celé číslo obsahující ID procesu programu, pokud je stále spuštěné. 0, pokud program již byl dokončen.

Výjimky

Style není v rozsahu od 0 do 9 včetně.

Shellaplikace nemůže najít soubor.PathName

PathName je Nothing.

Příklady

Následující příklad používá Shell funkci ke spuštění aplikace určené uživatelem. Zadáním AppWinStyle.NormalFocus druhého argumentu se aplikace otevře v normální velikosti a fokus se zobrazí.

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.

Poznámky

Návratová Shell hodnota funkce závisí na tom, jestli program pojmenovaný v PathName aplikaci stále probíhá při Shell návratu. Pokud nastavíte WaitTrue hodnotu a program skončí před vypršením časového limitu, Shell vrátí nulu. Pokud vypršení časového limitu vyprší nebo pokud ho vynecháte Wait nebo nastavíte na Falsehodnotu , Shell vrátí ID procesu programu. ID procesu je jedinečné číslo, které identifikuje spuštěný program.

Nepodařilo se spustit

Shell Pokud funkce nemůže spustit pojmenovaný program, dojde k FileNotFoundException chybě. K tomu může dojít například při pokusu o spuštění 16bitového programu, například command.com, z aplikace používající System.Windows.Forms. Alternativní řešení můžete spustit 32bitový program, který volá požadovaný 16bitový program. V případě command.com, můžete spustit cmd.exe jako alternativu.

Čekání na dokončení

Ve výchozím nastavení Shell funkce program spouští asynchronně. To znamená, že program spuštěný s Shell funkcí nemusí dokončit provádění před provedením příkazů, které následují za Shell funkcí. Pokud chcete počkat na dokončení programu, než budete pokračovat, nastavte na Waithodnotu True .

Určení ukončovacího kódu

Proces může po ukončení vrátit ukončovací kód . Nelze však použít Shell k načtení tohoto ukončovacího kódu, protože Shell vrátí nulu, pokud čeká na ukončení, a také proto, že proces běží v jiném objektu než Shell.

Pokud chcete načíst ukončovací kód z procesu, musíte napsat vlastní kód, který zahájí proces a počká na ukončení. Následující příklad ukazuje, jak zahájit proces, počkat na jeho ukončení a načíst jeho ukončovací kód.

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

Ochrana specifikace souboru

Vždy byste měli uzavřít celou cestu a specifikaci souboru do uvozovek, jak ukazuje následující příklad.

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

Každá dvojice sousedních dvojitých uvozovek (" ") v řetězcovém literálu se interpretuje jako jeden dvojitý uvozovek v řetězci. Předchozí příklad proto funkci představuje následující řetězec Shell :

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

Pokud nemáte cestu uzavřenou v uvozovkách, Windows by hledal soubor s názvem Program.exe v adresáři C:\ místo display.exe v adresáři C:\Program Files.

Important

Pokud cestu a specifikaci souboru neuzavřete do uvozovek, existuje riziko zabezpečení, pokud název souboru nebo uzel cesty obsahuje mezery. V předchozím příkladu uzel \Program Files cesty obsahuje mezeru. Pokud by specifikace nebyla uvnitř uvozovek a program s názvem Program.exe byl nainstalován v C:\, například neoprávněnou manipulací, Windows by ji spustil místo display.exe.

Important

Funkce Shell vyžaduje nespravované oprávnění ke kódu, které může ovlivnit jeho spuštění v situacích částečné důvěryhodnosti. Další informace najdete v tématu SecurityPermission a oprávnění pro přístup ke kódu.

Platí pro

Viz také