Runs an executable program and returns an integer containing the program's process ID if it is still running.
Public Function Shell( _ ByVal PathName As String, _ Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus, _ Optional ByVal Wait As Boolean = False, _ Optional ByVal Timeout As Integer = -1 _ ) As Integer
|
Exception type |
Error number |
Condition |
|---|---|---|
|
Style is not within range 0 through 9, inclusive. |
||
|
Shell cannot find the PathName file. |
||
|
PathName is Nothing. |
See the "Error number" column if you are upgrading Visual Basic 6.0 applications that use unstructured error handling. (You can compare the error number against the Number Property (Err Object).) However, when possible, you should consider replacing such error control with Structured Exception Handling Overview for Visual Basic.
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 that starts with the Shell function might not finish executing before the statements that follow the Shell function execute. 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 the path is not enclosed in quotation marks, Windows looks for a file called Program.exe in the C:\ directory, instead of display.exe in the C:\Program Files directory.
Security Note:
|
|---|
|
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 is not located inside quotation marks and a program named Program.exe is installed in C:\, for example by illicit tampering, Windows executes it instead of display.exe. |
Security Note:
|
|---|
|
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. |
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.
This function is not supported.
Namespace: Microsoft.VisualBasic
Module: Interaction
Assembly: Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)
Reference
dear,
I use
Call Shell(ping 10.0.0.1 , 1)
to ping any IP address. is there any way that i can display the ping results in TEXT Box rather than in another window. Some kind of help i got from here already but that displays the result on ONE Time. how can i get the repeat results.
(*same as ping command do)
Please help me..
[tfl - 09 06 09] Hi - and thanks for your post. You should post questions like this to the MSDN Forums at http://forums.microsoft.com/msdn or the MSDN Newsgroups at
http://www.microsoft.com/communities/newsgroups/en-us/. You are much more likely get a quicker response using the forums than through the Community Content. For specific help about:
Visual Studio : http://groups.google.com/groups/dir?sel=usenet%3Dmicrosoft.public.vstudio%2C&
.NET Framework : http://groups.google.com/groups/dir?sel=usenet%3Dmicrosoft.public.dotnet.framework
All Public : http://groups.google.com/groups/dir?sel=usenet%3Dmicrosoft.public%2C&
Hi
How I can use this function (shell) to run an application that not showing in the windows task manager.
[tfl - 09 06 09] Hi - and thanks for your post. You should post questions like this to the MSDN Forums at http://forums.microsoft.com/msdn or the MSDN Newsgroups at
http://www.microsoft.com/communities/newsgroups/en-us/. You are much more likely get a quicker response using the forums than through the Community Content. For specific help about:
Visual Studio : http://groups.google.com/groups/dir?sel=usenet%3Dmicrosoft.public.vstudio%2C&
.NET Framework : http://groups.google.com/groups/dir?sel=usenet%3Dmicrosoft.public.dotnet.framework
All Public : http://groups.google.com/groups/dir?sel=usenet%3Dmicrosoft.public%2C&
Security Note: