Interaction.Shell(String, AppWinStyle, Boolean, Int32) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 Wait
True
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 Wait
True
.
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.