Interaction.Shell(String, AppWinStyle, Boolean, Int32) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
執行可執行程式,並在它仍在執行中時傳回一個整數 (整數中包含此程式的處理序 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
選擇性。 AppWinStyle
. 選自 AppWinStyle 的值,可指定此程式執行所在之視窗的樣式。 如果省略 Style
,則 Shell
會使用 AppWinStyle.MinimizedFocus
(其會以最小化狀態啟動程式,並具有焦點)。
- Wait
- Boolean
選擇性。 Boolean
. 值,表示 Shell
函式是否應該等候程式完成。 如果省略 Wait
,則 Shell
會使用 False
。
- Timeout
- Int32
選擇性。 Integer
. 如果 Wait
為 True
,則為等候完成的毫秒數。 如果省略 Timeout
,則 Shell
會使用 -1,這表示沒有逾時,且 Shell
要等到程式完成後才會傳回。 因此,如果您省略 Timeout
或是將它設定為 -1,則 Shell
有可能永遠都不會將控制權傳回給您的程式。
傳回
包含此程式處理序識別碼的整數 (如果它仍在執行中)。 如果程式已完成執行則為 0。
例外狀況
Style
不在 0 到 9 的範圍內 (含 0 和 9)。
Shell
找不到 PathName
檔案。
PathName
為 Nothing
。
範例
下列範例會使用函 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
傳回值取決於中 PathName
名為的程式是否仍在傳回時 Shell
執行。 如果您設定 Wait
為 True
,且程式在逾時到期之前完成,則 Shell
傳回零。 如果逾時過期,或者如果您省略 Wait
或將它設定為 False
, Shell
則會傳回程式的進程標識碼。 進程標識碼是識別執行中程式的唯一數位。
無法啟動
如果函 Shell
式無法啟動具名程式, FileNotFoundException 就會發生錯誤。 例如,當您嘗試從使用System.Windows.Forms的應用程式執行16位程式時,可能會command.com
發生這種情況。 如需因應措施,您可以執行呼叫所需 16 位程式的 32 位程式。 如果是 command.com
,您可以以替代方式執行 cmd.exe
。
等候完成
根據預設,函式會 Shell
以異步方式執行程式。 這表示從函式開始 Shell
的程式在執行函式之後 Shell
的語句之前,可能無法完成執行。 如果您要等候程式在繼續之前完成,請將 設定 Wait
為 True
。
判斷結束代碼
進程可以在結束時傳回 結束代碼 。 不過,您無法使用 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
的檔案,而不是 display.exe
在 C:\Program Files 目錄中尋找。
重要
如果您未以引弧括住路徑和檔案規格,如果檔名或路徑節點包含空格,就會有安全性風險。 在上述範例中,路徑節點 \Program Files
包含空格。 如果規格不在引號內,且名為 Program.exe
的程式已在 C:\中安裝,例如,透過非法竄改,Windows 會執行它,而不是 display.exe
。
重要
函 Shell
式需要 Unmanaged 程式代碼許可權,這可能會在部分信任的情況下影響其執行。 如需詳細資訊,請參閱 SecurityPermission 與程式碼存取權限。