Interaction.Shell(String, AppWinStyle, Boolean, Int32) 方法

定義

執行一個可執行程式,若程式仍在執行,則回傳包含程序 ID 的整數。

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

參數

PathnamePathName
String

必須的。 String。 要執行的程式名稱,以及所有必要的參數和命令列開關。 PathName 也可以包含磁碟機和目錄路徑或資料夾。 如果你不知道該程式的路徑,可以使用該 GetFiles 系統來尋找它。 例如,你可以呼叫 My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"),它會回傳 C:\ 磁碟上任何一個檔案的完整 testFile.txt 路徑。

Style
AppWinStyle

Optional. AppWinStyle。 一個從中 AppWinStyle 選擇的值,指定程式執行的視窗樣式。 若 Style 省略,則 Shell 使用 AppWinStyle.MinimizedFocus,此時程式以最小化且聚焦開始。

Wait
Boolean

Optional. Boolean。 一個表示函式是否 Shell 應該等待程式完成的值。 若 Wait 省略 ,則 Shell 使用 False

Timeout
Int32

Optional. Integer。 若完成 Wait ,則等待的毫秒數為 True。 若 Timeout 省略 Shell ,則使用-1,表示沒有逾時,且 Shell 程式完成前不會返回。 因此,如果你省略 Timeout 或設為 -1,程式可能 Shell 永遠無法回傳控制權。

傳回

一個整數,若程式仍在執行,則包含程序 ID。 若程式已完成執行,則為 0。

例外狀況

Style 不在0到9的範圍內。

Shell找不到檔案。PathName

PathNameNothing

範例

以下範例使用 Shell 了執行使用者指定的應用程式的函式。 將 指定 AppWinStyle.NormalFocus 為第二個參數,應用程式會以正常大小開啟並獲得焦點。

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.

備註

函式的Shell回傳值取決於在回傳時Shell,所命名PathName的程式是否仍在執行中。 如果你設定 Wait 為 , True 且程式在逾時結束前完成,則會 Shell 回傳零。 如果逾時過了,或你省略 Wait 或設定為 FalseShell 則會回傳程式的程序 ID。 程序 ID 是一個唯一編號,用來識別正在執行的程式。

未能啟動

如果函式 Shell 無法啟動該命名程式,就會 FileNotFoundException 發生錯誤。 例如,當你嘗試從使用 System.Windows.Forms 的應用程式執行 16 位元程式(如 command.com 時,可能會發生這種情況。 作為變通方法,你可以執行一個 32 位元程式,呼叫所需的 16 位元程式。 如果是 command.com,你可以選擇跑 cmd.exe

等待完工

預設情況下,該 Shell 函式以非同步方式執行程式。 這表示以該 Shell 函式啟動的程式可能還沒完成執行,就不會在函式後續 Shell 的語句被執行之前。 如果你想等程式結束再繼續,可以設定 WaitTrue

確定出境代碼

程序在終止時可以回傳 一個退出代碼 。 然而,你無法用來 Shell 取得這個退出碼,因為 Shell 如果等待終止,會回傳零,而且程序在另一個物件 Shell中執行。

要從程序中取得退出碼,您必須自行撰寫程式碼啟動程序並等待終止。 以下範例說明如何啟動程序、等待其終止,以及取得其退出代碼。

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

保護檔案規範

你應該總是用引號包住整個路徑和檔案規範,如下範例所示。

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

字串文字中相鄰的雙引號(" ")對,會被解釋為字串中的一個雙引號字元。 因此,前述範例給出函數的字串 Shell

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

如果你沒有用引號包住路徑,Windows會在 C:\ 目錄中尋找名為 Program.exe 的檔案,而不是在 C:\Program Files 目錄中尋找 display.exe

Important

若未將路徑與檔案規範以引號包圍,若檔名或路徑節點包含空格,則存在安全風險。 在前述範例中,路徑節點 \Program Files 包含一個空間。 如果規範不在引號內,且程式名稱為 Program.exe 被安裝在 C:\ 中,例如透過非法竄改,Windows 會執行該程式而非 display.exe

Important

Shell 函式需要非管理程式碼權限,這可能會影響部分信任情況下的執行。 欲了解更多資訊,請參閱SecurityPermission及代碼存取權限

適用於

另請參閱