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.

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

Obligatorio. String. Nombre del programa que se va a ejecutar, junto con los argumentos y modificadores de línea de comandos necesarios. PathName puede incluir asimismo la unidad y la ruta de acceso al directorio o la carpeta.
Si se desconoce la ruta de acceso al programa, se puede utilizar GetFiles para buscarla. 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:\.

Style
AppWinStyle

Opcional. AppWinStyle. Un valor elegido de AppWinStyle que especifica el estilo de la ventana en la que se va a ejecutar el programa. Si se omite Style, Shell utiliza AppWinStyle.MinimizedFocus, que inicia el programa de manera minimizada y con foco.

Wait
Boolean

Opcional. Boolean. Un valor que indica si la función Shell debe esperar a que finalice el programa. Si se omite Wait, Shell utiliza False.

Timeout
Int32

Opcional. Integer. Número de milisegundos que se va a esperar a que finalice si el valor de Wait es 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. Por consiguiente, si se omite Timeout o se establece en -1, es posible que Shell nunca devuelva el control al programa.

Devoluciones

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

Excepciones

Style está fuera del intervalo comprendido entre 0 y 9, ambos inclusive.

Shell no puede encontrar el archivo PathName.

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 da 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 WaitTrue en 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 en False, 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, cuando se intenta 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.

Espera de 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 que Shell devuelve cero si espera la finalizació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 a 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 llamado Program.exe en el directorio C:\, en lugar de en el directorio C:\Archivos de display.exe 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 se hubiera instalado un programa denominado Program.exe 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, lo que podría afectar a su ejecución en situaciones de confianza parcial. Para obtener más información, vea SecurityPermission y Permisos de acceso del código.

Se aplica a

Consulte también