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 todavía se está ejecutando.

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

Parámetros

PathnamePathName
String

Required. String. Nombre del programa que se va a ejecutar, junto con los argumentos necesarios y los modificadores de línea de comandos. PathName también puede incluir la unidad y la ruta de acceso o carpeta del directorio. Si no conoce la ruta de acceso al programa, puede usar para GetFiles localizarlo. Por ejemplo, puede llamar a My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), que devuelve la ruta de acceso completa de todos los archivos denominados testFile.txt en cualquier lugar de la unidad C:\.

Style
AppWinStyle

Optional. AppWinStyle. Valor elegido de la AppWinStyle especificación del estilo de la ventana en la que se va a ejecutar el programa. Si Style se omite, Shell usa AppWinStyle.MinimizedFocus, que inicia el programa minimizado y con el foco.

Wait
Boolean

Optional. Boolean. Valor que indica si la Shell función debe esperar a que finalice el programa. Si Wait se omite, Shell usa False.

Timeout
Int32

Optional. Integer. Número de milisegundos que se van a esperar a la finalización si Wait es True. Si Timeout se omite, Shell usa -1, lo que significa que no hay tiempo de espera y Shell no devuelve hasta que finalice el programa. Por lo tanto, si omite Timeout o establece en -1, es posible que Shell nunca devuelva el control al programa.

Devoluciones

Entero que contiene el identificador de proceso del programa si todavía se está ejecutando. 0 si el programa ya ha terminado de ejecutarse.

Excepciones

Style no está comprendido entre 0 y 9, ambos incluidos.

Shell no puede encontrar el PathName archivo.

PathName es Nothing.

Ejemplos

En el ejemplo siguiente se usa la Shell función para ejecutar una aplicación especificada por el usuario. Al especificar AppWinStyle.NormalFocus como segundo argumento se abre la aplicación en tamaño normal y se le proporciona el foco.

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 Shell función depende de si el programa denominado en PathName sigue ejecutándose cuando Shell se devuelve. Si establece Wait en True y el programa finaliza antes de que expire el tiempo de espera, Shell devuelve cero. Si expira el tiempo de espera, o si se omite Wait o se establece Falseen , Shell devuelve el identificador de proceso del programa. El identificador de proceso es un número único que identifica el programa en ejecución.

Error al iniciar

Si la Shell función no puede iniciar el programa con nombre, se produce un FileNotFoundException error. Esto puede ocurrir, por ejemplo, al intentar ejecutar un programa de 16 bits, como command.com, desde una aplicación mediante System.Windows.Forms. Para una solución alternativa, puede ejecutar un programa de 32 bits que llame al programa de 16 bits deseado. En el caso de command.com, puede ejecutarse cmd.exe como alternativa.

Esperando la finalización

De forma predeterminada, la Shell función ejecuta el programa de forma asincrónica. Esto significa que es posible que un programa iniciado con la Shell función no termine de ejecutarse antes de que se ejecuten las instrucciones siguientes a la Shell función. Si desea esperar a que finalice el programa antes de continuar, establezca en WaitTrue.

Determinar el código de salida

Un proceso puede devolver un código de salida cuando finaliza. Sin embargo, no puede usar Shell para recuperar este código de salida, ya Shell que devuelve cero si espera la terminación y también porque el proceso se ejecuta en un objeto diferente de Shell.

Para recuperar el código de salida de un proceso, debe escribir su propio código para iniciar el proceso y esperar la finalización. En el ejemplo siguiente se muestra cómo iniciar un proceso, esperar a que finalice y recuperar su código de salida.

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 archivo

Siempre debe incluir toda la ruta de acceso y la especificación de archivo entre comillas, como se muestra en el ejemplo siguiente.

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 comilla doble en la cadena. Por lo tanto, en el ejemplo anterior se presenta la siguiente cadena a la Shell función :

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

Si no tiene la ruta de acceso entre comillas, Windows buscaría un archivo denominado Program.exe en el directorio C:\, en lugar de display.exe en el directorio C:\Archivos de programa.

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. En el ejemplo anterior, el nodo \Program Files de ruta de acceso incluye un espacio. Si la especificación no estuviera entre comillas y un programa denominado Program.exe se hubiera instalado en C:\, por ejemplo, mediante manipulación ilícita, Windows lo ejecutaría en lugar de display.exe.

Importante

La Shell función requiere permiso de código no administrado, que podría afectar a su ejecución en situaciones de confianza parcial. Para obtener más información, consulte SecurityPermission y Permisos de acceso de código.

Se aplica a

Consulte también