Microsoft KB Archive/118644

= PRB: No Trappable Error on Shell to Nonexistent .BAT File =

Article ID: 118644

Article Last Modified on 12/9/2003

-

APPLIES TO


 * Microsoft Visual Basic 2.0 Standard Edition
 * Microsoft Visual Basic 3.0 Professional Edition
 * Microsoft Visual Basic 2.0 Professional Edition
 * Microsoft Visual Basic 3.0 Professional Edition
 * Microsoft Visual Basic 1.0 Standard Edition

-



This article was previously published under Q118644



SYMPTOMS
When you execute the Shell command to run a batch (.BAT) file, no error message is generated if the batch file specified does not exist.



MORE INFORMATION
The following is from the Help topic "Shell":

The Visual Basic Shell command runs an executable program. If the Shell function successfully executes the named program, it returns the instance handle of the started program. If the Shell function can't start the named program, an error occurs.

However, if you use Shell to run a batch file that does not exist, a modal dialog box inclusing the following text is generated:

Cannot find file.

Check to make sure the path and filename are correct.

In this case, Visual Basic continues to run, no error message is generated, and the return value from Shell has a legitimate Windows instance handle.



CAUSE
This is by design and is the same behavior you see when using the Windows API WinExec. "Shelling" to a batch program generates a handle to the command processor, which runs the batch program. This handle is returned to Visual Basic. When the command processor determines that there is no such batch file, it is a process independent from Visual Basic and the error is therefore not reported to Visual Basic.

Steps to Reproduce the Problem
 Start Visual Basic; or, if Visual Basic is already running, choose New Project (ALT + F, N) from the File menu. Form1 is created by default. Add a text box (Text1) to Form1 and type "Bogus.Bat" (without the quotes) in the Text property.  Add the following code to the Form_Click event for Form1: Sub Form_Click Dim X As Integer X = Shell((Text1.Text)) Print X, Err 'returns a valid process handle in x and err = 0 End Sub

 From the Run menu, choose Start (ALT + R, S), or press the F5 key to run the program. Click the form.

The program attempts to run a nonexistent batch file and generates an error outside the control of Visual Basic. If you enter a .EXE filename that does not exist, Visual Basic correctly generates an error 53, "File Not Found".

Workaround
Replace the code from the above example with the following code:

Sub Form_Click Dim X As Integer

If Len(Dir((Text1.Text))) > 0 Then X = Shell((Text1.Text)) Print X, Err 'returns a valid process handle in x and err = 0 Else MsgBox "No such file exists." End If     End Sub

Additional query words: 2.00 3.00

Keywords: kbprb KB118644

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.