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
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 该文件。
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的程序是否仍在执行。 如果设置为WaitTrue程序并且程序在超时到期之前完成,Shell则返回零。 如果超时过期,或者省略 Wait 或将其设置为 False, Shell 则返回程序的进程 ID。 进程 ID 是标识正在运行的程序的唯一数字。
未能启动
Shell如果函数无法启动命名程序,FileNotFoundException则会发生错误。 例如,尝试使用 command.com 从应用程序运行 16 位程序(如 System.Windows.Forms)时,可能会发生这种情况。 对于解决方法,可以运行调用所需 16 位程序的 32 位程序。 在这种情况下 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 包括一个空格。 如果规范不在引号内,并且 C:\中安装了名为 Program.exe 的程序,例如通过非法篡改,Windows将执行它,而不是 display.exe。
Important
该 Shell 函数需要非托管代码权限,这可能会在部分信任的情况下影响其执行。 有关详细信息,请参阅 SecurityPermission 和 代码访问权限。