Compartir a través de


Shell (Función)

Actualización: noviembre 2007

Inicia un programa ejecutable y devuelve un entero que contiene el identificador de proceso del programa si aún se encuentra en ejecución.

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

Parámetros

  • PathName
    Obligatorio. String. Nombre del programa que se va a ejecutar junto con cualquier argumento necesario y cualquier modificador de línea de comandos. PathName puede incluir también la unidad y la carpeta o la ruta de acceso del directorio.

    Si no sabe cuál es la ruta de acceso al programa, puede utilizar el método My.Computer.FileSystem.GetFiles (Método) para buscarlo. Por ejemplo, puede llamar a My.Computer.FileSystem.GetFiles("C:\", True, "testFile.txt"), que devuelve la ruta de acceso completa de todos los archivos con el nombre testFile.txt situados en cualquier ubicación de la unidad C:\.

  • Style
    Opcional. AppWinStyle. Valor elegido en la enumeración AppWinStyle (Enumeración) 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 minimizado y con foco.

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

  • Timeout
    Opcional. Integer. Número de milisegundos de espera para la finalización cuando Wait es True. Si se omite Timeout, Shell utiliza -1, lo que significa que no hay ningún tiempo de espera y que Shell no retorna hasta que el programa finaliza. Por consiguiente, si omite Timeout o lo establece en -1, es posible que Shell nunca pueda devolver el control al programa.

Excepciones

Tipo de excepción

Número de error

Condición

ArgumentException

5

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

FileNotFoundException

53

Shell no puede encontrar el archivo PathName.

NullReferenceException

91

PathName es Nothing.

Consulte la columna "Número de error" si está actualizando aplicaciones de Visual Basic 6.0 que utilizan el control de errores no estructurado. (Se puede comparar el número de error con respecto a Number (Propiedad, objeto Err)). Sin embargo, siempre que sea posible, debe considerarse la posibilidad de sustituir dicho control de errores por Información general sobre el control estructurado de excepciones de Visual Basic.

Comentarios

El valor devuelto de la función Shell depende de si el programa especificado en PathName aún se está ejecutando cuando Shell devuelve un valor. Si establece Wait en True y el programa finaliza antes de que el tiempo de espera caduque, Shell devuelve cero. Si vence 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 función Shell no puede iniciar el programa especificado, se produce un error FileNotFoundException. Esto puede ocurrir, por ejemplo, cuando intenta ejecutar un programa de 16 bits, como command.com, desde una aplicación utilizando System.Windows.Forms. Como solución, puede ejecutar un programa de 32 bits que llame al programa de 16 bits deseado. En el caso de command.com, puede ejecutar cmd.exe como alternativa.

Esperar a que finalice la ejecución

De manera predeterminada, la función Shell ejecuta el programa de forma asincrónica. Esto significa que es posible que la ejecución de un programa que se inicia con la función Shell no termine hasta que se ejecuten las instrucciones que siguen a la función Shell. Si desea esperar a que finalice el programa antes de continuar, establezca Wait en True.

Determinar el código de salida

Un proceso puede devolver un código de salida cuando finaliza. Sin embargo, no se puede utilizar Shell para recuperar este código de salida porque Shell devuelve cero si espera a que finalice la ejecución y además 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 que finalice. 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))

Proteger la especificación del archivo

Siempre debe entrecomillarse la ruta de acceso completa y la especificación del archivo, tal y como se muestra en el siguiente ejemplo:

ID = Shell("""C:\Program Files\display.exe"" -a -q", , True, 100000)

Cada par de comillas dobles adyacentes (" ") situado dentro del carácter literal de cadena se interpreta como un carácter de comillas dobles en la cadena. Por tanto, en el ejemplo anterior se presenta la siguiente cadena para la función Shell:

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

Si la ruta de acceso no está encerrada entre comillas, Windows busca un archivo denominado Program.exe en el directorio C:\, en lugar de buscar display.exe en el directorio C:\Archivos de programa.

Nota de seguridad:

Si no encierra entre comillas la ruta de acceso y la especificación de archivo, la seguridad puede verse comprometida si el nombre del archivo o un nodo de la ruta contienen espacios. En el ejemplo anterior, el nodo de la ruta de acceso \Program Files incluye un espacio. Si la especificación no se encontrase entrecomillada y se hubiese instalado en C:\ un programa denominado Program.exe, por ejemplo de forma ilegal, Windows lo ejecuta en lugar de display.exe.

Nota de seguridad:

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

Ejemplo

En este ejemplo se utiliza la función Shell para ejecutar una aplicación especificada por el usuario. La especificación AppWinStyle.NormalFocus como segundo argumento abre la aplicación en tamaño normal y 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.

Notas para desarrolladores de dispositivos inteligentes

Esta función no es compatible.

Requisitos

Espacio de nombres:Microsoft.VisualBasic

**Módulo:**Interaction

**Ensamblado:**Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)

Vea también

Referencia

AppWinStyle (Enumeración)

ArgumentException

FileNotFoundException

NullReferenceException

My.Computer.FileSystem.GetFiles (Método)

AppActivate (Función)