Interaction.Shell(String, AppWinStyle, Boolean, Int32) Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Runs an executable program and returns an integer containing the program's process ID if it is still running.
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
Parameters
- PathNamePathname
- String
Required. String
. Name of the program to execute, together with any required arguments and command-line switches. PathName
can also include the drive and the directory path or folder.
If you do not know the path to the program, you can use the GetFiles to locate it. For example, you can call My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt")
, which returns the full path of every file named testFile.txt
anywhere on drive C:\.
- Style
- AppWinStyle
Optional. AppWinStyle
. A value chosen from the AppWinStyle specifying the style of the window in which the program is to run. If Style
is omitted, Shell
uses AppWinStyle.MinimizedFocus
, which starts the program minimized and with focus.
- Wait
- Boolean
Optional. Boolean
. A value indicating whether the Shell
function should wait for completion of the program. If Wait
is omitted, Shell
uses False
.
- Timeout
- Int32
Optional. Integer
. The number of milliseconds to wait for completion if Wait
is True
. If Timeout
is omitted, Shell
uses -1, which means there is no timeout and Shell
does not return until the program finishes. Therefore, if you omit Timeout
or set it to -1, it is possible that Shell
might never return control to your program.
Returns
An integer containing the program's process ID if it is still running. 0 if the program already finished executing.
Exceptions
Style
is not within range 0 through 9, inclusive.
Shell
cannot find the PathName
file.
PathName
is Nothing
.
Examples
The following example uses the Shell
function to run an application specified by the user. Specifying AppWinStyle.NormalFocus as the second argument opens the application in normal size and gives it the focus.
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.
Remarks
The return value of the Shell
function depends on whether the program named in PathName
is still executing when Shell
returns. If you set Wait
to True
and the program finishes before the timeout expires, Shell
returns zero. If the timeout expires, or if you omit Wait
or set it to False
, Shell
returns the process ID of the program. The process ID is a unique number that identifies the running program.
Failure to Start
If the Shell
function cannot start the named program, a FileNotFoundException error occurs. This can happen, for example, when you attempt to run a 16-bit program, such as command.com
, from an application using System.Windows.Forms. For a workaround, you can run a 32-bit program that calls the desired 16-bit program. In the case of command.com
, you can run cmd.exe
as an alternative.
Waiting for Completion
By default, the Shell
function runs the program asynchronously. This means that a program started with the Shell
function might not finish executing before the statements following the Shell
function are executed. If you want to wait for the program to finish before you continue, set Wait
to True
.
Determining the Exit Code
A process can return an exit code when it terminates. However, you cannot use Shell
to retrieve this exit code, because Shell
returns zero if it waits for termination, and also because the process runs in a different object from Shell
.
To retrieve the exit code from a process, you must write your own code to initiate the process and wait for termination. The following example shows how to initiate a process, wait for it to terminate, and retrieve its exit code.
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))
Protecting the File Specification
You should always enclose the entire path and file specification in quotation marks, as the following example shows.
ID = Shell("""C:\Program Files\display.exe"" -a -q", , True, 100000)
Each pair of adjacent double quotation marks (" "
) within the string literal is interpreted as one double quotation character in the string. Therefore, the preceding example presents the following string to the Shell
function:
"C:\Program Files\display.exe" -a -q
If you did not have the path enclosed in quotation marks, Windows would look for a file called Program.exe
in the C:\ directory, instead of display.exe
in the C:\Program Files directory.
Important
If you do not enclose the path and file specification in quotation marks, there is a security risk if the file name or a path node contains spaces. In the preceding example, the path node \Program Files
includes a space. If the specification were not inside quotation marks and a program named Program.exe
had been installed in C:\, for example by illicit tampering, Windows would execute it instead of display.exe
.
Important
The Shell
function requires unmanaged code permission, which might affect its execution in partial-trust situations. For more information, see SecurityPermission and Code Access Permissions.