Sdílet prostřednictvím


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

Povinná hodnota. String. Název programu, který se má spustit, spolu s 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 ho vyhledat pomocí .GetFiles Můžete například volat My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), který vrátí úplnou cestu ke každému souboru s názvem testFile.txt kdekoli na jednotce C:\.

Style
AppWinStyle

Nepovinný parametr. AppWinStyle. Hodnota zvolená z AppWinStyle určující styl okna, ve kterém má program běžet. Pokud Style je vynechán, Shell použije AppWinStyle.MinimizedFocusnástroj , který spustí program minimalizovaný a s fokusem.

Wait
Boolean

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

Timeout
Int32

Nepovinný parametr. Integer. Počet milisekund, které se mají čekat na dokončení, pokud Wait je Truehodnota . Pokud Timeout je vynechán, Shell použije se hodnota -1, což znamená, že nedojde k vypršení časového limitu a Shell nevrátí se, dokud program nedokončí. Pokud ho tedy vynecháte Timeout nebo nastavíte na hodnotu -1, je možné, že Shell řízení programu nikdy nevrátíte.

Návraty

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

Výjimky

Style není v rozsahu 0 až 9 (včetně).

Shell Aplikace nemůže najít PathName soubor.

PathName je Nothing.

Příklady

Následující příklad používá Shell funkci ke spuštění aplikace určené uživatelem. Když AppWinStyle.NormalFocus jako druhý argument zadáte, otevře se aplikace v normální velikosti a získá jí 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.

Poznámky

Vrácená hodnota Shell funkce závisí na tom, jestli program s názvem v PathName se při Shell vrácení stále spouští. Pokud nastavíte Wait na True a program se dokončí před vypršením časového limitu, Shell vrátí se nula. Pokud časový limit vyprší nebo pokud ho vynecháte Wait nebo nastavíte na False, Shell vrátí ID procesu programu. ID procesu je jedinečné číslo, které identifikuje spuštěný program.

Chyba spuštění

Shell Pokud funkce nemůže spustit pojmenovaný program, FileNotFoundException dojde k 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 pomocí System.Windows.Forms. Jako alternativní řešení můžete spustit 32bitový program, který volá požadovaný 16bitový program. V případě můžete jako alternativu command.comspustit cmd.exe příkaz .

Čekání na dokončení

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

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 pokud čeká na ukončení, vrátí nulu 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

Celou cestu a specifikaci souboru byste měli vždy uzavřít 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 je interpretována jako jedna dvojitá uvozovka v řetězci. Proto předchozí příklad představuje funkci následující řetězec Shell :

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

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

Důležité

Pokud cestu a specifikaci souboru neuzavřete do uvozovek, znamená to bezpečnostní riziko, pokud název souboru nebo uzel cesty obsahuje mezery. V předchozím příkladu obsahuje uzel \Program Files cesty mezeru. Pokud by specifikace nebyla v uvozovkách a program s názvem Program.exe byl nainstalován v C:\, například neoprávněnou manipulací, systém Windows by ho display.exespustil místo .

Důležité

Funkce Shell vyžaduje oprávnění nespravovaného kódu, což může mít vliv na její provádění v situacích s částečnou důvěryhodností. Další informace najdete v tématech SecurityPermission a Přístupová oprávnění ke kódu.

Platí pro

Viz také