Interaction.Shell(String, AppWinStyle, Boolean, Int32) Método

Definición

Ejecuta un programa ejecutable y devuelve un entero que contiene el identificador de proceso del programa si aún se está ejecutando.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);
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

Parámetros

Pathname
String

Obligatorio.Required. String.String. Nombre del programa que se va a ejecutar, junto con los argumentos y modificadores de línea de comandos necesarios.Name of the program to execute, together with any required arguments and command-line switches. PathName puede incluir asimismo la unidad y la ruta de acceso al directorio o la carpeta.PathName can also include the drive and the directory path or folder. Si se desconoce la ruta de acceso al programa, se puede utilizar GetFiles para buscarla.If you do not know the path to the program, you can use the GetFiles to locate it. Por ejemplo, puede llamar a My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), que devuelve la ruta de acceso completa de cada archivo denominado testFile.txt en cualquier lugar de la unidad C:\.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

Opcional.Optional. AppWinStyle.AppWinStyle. Un valor elegido de AppWinStyle que especifica el estilo de la ventana en la que se va a ejecutar el programa.A value chosen from the AppWinStyle specifying the style of the window in which the program is to run. Si se omite Style, Shell utiliza AppWinStyle.MinimizedFocus, que inicia el programa de manera minimizada y con foco.If Style is omitted, Shell uses AppWinStyle.MinimizedFocus, which starts the program minimized and with focus.

Wait
Boolean

Opcional.Optional. Boolean.Boolean. Un valor que indica si la función Shell debe esperar a que finalice el programa.A value indicating whether the Shell function should wait for completion of the program. Si se omite Wait, Shell utiliza False.If Wait is omitted, Shell uses False.

Timeout
Int32

Opcional.Optional. Integer.Integer. Número de milisegundos que se va a esperar a que finalice si el valor de Wait es True.The number of milliseconds to wait for completion if Wait is True. Si se omite Timeout, Shell utiliza -1, lo que significa que no hay tiempo de espera y Shell no devuelve ningún valor hasta que finaliza el programa.If Timeout is omitted, Shell uses -1, which means there is no timeout and Shell does not return until the program finishes. Por consiguiente, si se omite Timeout o se establece en -1, es posible que Shell nunca devuelva el control al programa.Therefore, if you omit Timeout or set it to -1, it is possible that Shell might never return control to your program.

Devoluciones

Entero que contiene el identificador de proceso del programa si aún se está ejecutando.An integer containing the program's process ID if it is still running. 0 si el programa ya ha terminado de ejecutarse.0 if the program already finished executing.

Excepciones

Style está fuera del intervalo comprendido entre 0 y 9, ambos inclusive.Style is not within range 0 through 9, inclusive.

Shell no puede encontrar el archivo PathName.Shell cannot find the PathName file.

PathName es Nothing.PathName is Nothing.

Ejemplos

En el ejemplo siguiente se usa la función Shell para ejecutar una aplicación especificada por el usuario.The following example uses the Shell function to run an application specified by the user. Si se especifica AppWinStyle.NormalFocus como segundo argumento, se abre la aplicación en tamaño normal y se le asigna el foco.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.

Comentarios

El valor devuelto de la función Shell depende de si el programa mencionado en PathName todavía se está ejecutando cuando Shell devuelve.The return value of the Shell function depends on whether the program named in PathName is still executing when Shell returns. Si establece Wait en True y el programa finaliza antes de que expire el tiempo de espera, Shell devuelve cero.If you set Wait to True and the program finishes before the timeout expires, Shell returns zero. Si expira el tiempo de espera, o si se omite Wait o se establece en False, Shell devuelve el identificador de proceso del programa.If the timeout expires, or if you omit Wait or set it to False, Shell returns the process ID of the program. El identificador de proceso es un número único que identifica el programa en ejecución.The process ID is a unique number that identifies the running program.

Error al iniciarFailure to Start

Si la función Shell no puede iniciar el programa con nombre, se produce un error FileNotFoundException.If the Shell function cannot start the named program, a FileNotFoundException error occurs. Esto puede ocurrir, por ejemplo, cuando se intenta ejecutar un programa de 16 bits, como command.com, desde una aplicación que usa System.Windows.Forms.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. En el caso de una solución alternativa, puede ejecutar un programa de 32 bits que llama al programa deseado de 16 bits.For a workaround, you can run a 32-bit program that calls the desired 16-bit program. En el caso de command.com, puede ejecutar cmd.exe como alternativa.In the case of command.com, you can run cmd.exe as an alternative.

Esperando la finalizaciónWaiting for Completion

De forma predeterminada, la función Shell ejecuta el programa de forma asincrónica.By default, the Shell function runs the program asynchronously. Esto significa que un programa iniciado con la función Shell podría no terminar de ejecutarse antes de que se ejecuten las instrucciones que siguen a la función Shell.This means that a program started with the Shell function might not finish executing before the statements following the Shell function are executed. Si desea esperar a que el programa finalice antes de continuar, establezca Wait en True.If you want to wait for the program to finish before you continue, set Wait to True.

Determinar el código de salidaDetermining the Exit Code

Un proceso puede devolver un código de salida cuando finaliza.A process can return an exit code when it terminates. Sin embargo, no puede usar Shell para recuperar este código de salida, porque Shell devuelve cero si espera la finalización, y también porque el proceso se ejecuta en un objeto diferente del Shell.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.

Para recuperar el código de salida de un proceso, debe escribir su propio código para iniciar el proceso y esperar a que finalice.To retrieve the exit code from a process, you must write your own code to initiate the process and wait for termination. En el ejemplo siguiente se muestra cómo iniciar un proceso, esperar a que finalice y recuperar el código de salida.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))  

Protección de la especificación de archivoProtecting the File Specification

Siempre debe incluir la ruta de acceso completa y la especificación de archivo entre comillas, como se muestra en el ejemplo siguiente.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)  

Cada par de comillas dobles adyacentes (" ") dentro del literal de cadena se interpreta como un carácter de doble comilla en la cadena.Each pair of adjacent double quotation marks (" ") within the string literal is interpreted as one double quotation character in the string. Por lo tanto, en el ejemplo anterior se presenta la siguiente cadena a la función Shell:Therefore, the preceding example presents the following string to the Shell function:

"C:\Program Files\display.exe" -a -q  

Si no tiene la ruta de acceso entre comillas, Windows buscaría un archivo llamado Program.exe en C:\ directorio, en lugar de display.exe en el directorio C:\Archivos de programa.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.

Importante

Si no incluye la ruta de acceso y la especificación de archivo entre comillas, existe un riesgo de seguridad si el nombre de archivo o un nodo de ruta de acceso contiene espacios.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. En el ejemplo anterior, el nodo path \Program Files incluye un espacio.In the preceding example, the path node \Program Files includes a space. Si la especificación no estuviera entre comillas y se hubiera instalado un programa denominado Program.exe en C: \, por ejemplo, mediante manipulación ilícita, Windows la ejecutaría en lugar de display.exe.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.

Importante

La función Shell requiere el permiso del código no administrado, lo que podría afectar a su ejecución en situaciones de confianza parcial.The Shell function requires unmanaged code permission, which might affect its execution in partial-trust situations. Para obtener más información, vea SecurityPermission y permisos de acceso del código.For more information, see SecurityPermission and Code Access Permissions.

Se aplica a

Consulte también: