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

Definição

Executa um programa executável e devolve um inteiro contendo o ID do processo do programa, caso este ainda esteja a correr.

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. Nome do programa a executar, juntamente com quaisquer argumentos necessários e comutadores de linha de comando. PathName pode também incluir o disco e o caminho ou pasta do diretório. Se não souber o caminho para o programa, pode usá-lo GetFiles para o localizar. Por exemplo, podes chamar My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), que devolve o caminho completo de cada ficheiro nomeado testFile.txt em qualquer lugar da unidade C:\.

Style
AppWinStyle

Optional. AppWinStyle. Um valor escolhido a partir AppWinStyle do que especifica o estilo da janela onde o programa irá executar. Se Style for omitido, Shell usa AppWinStyle.MinimizedFocus, que inicia o programa minimizado e com foco.

Wait
Boolean

Optional. Boolean. Um valor que indica se a Shell função deve esperar pela conclusão do programa. Se Wait for omitido, Shell usa False.

Timeout
Int32

Optional. Integer. O número de milissegundos para esperar pela conclusão é WaitTrue. Se Timeout for omitido, Shell usa -1, o que significa que não há timeout e Shell não retorna até o programa terminar. Portanto, se omitir Timeout ou definir para -1, é possível que isso Shell nunca volte a controlar o seu programa.

Devoluções

Um inteiro contendo o ID do processo do programa, caso ainda esteja a funcionar. 0 se o programa já terminou de ser executado.

Exceções

Style não está dentro do intervalo de 0 a 9, inclusive.

Shell Não consigo encontrar o ficheiro PathName .

PathName é Nothing.

Exemplos

O exemplo seguinte utiliza a Shell função para executar uma aplicação especificada pelo utilizador. Especificar AppWinStyle.NormalFocus como segundo argumento abre a aplicação em tamanho normal e dá-lhe o 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.

Observações

O valor de retorno da Shell função depende se o programa nomeado PathName em ainda está a correr quando Shell retorna. Se definires Wait para True e o programa terminar antes do timeout expirar, Shell não retorna nada. Se o timeout expirar, ou se o omitir Wait ou definir para False, Shell devolve o ID do processo do programa. O ID do processo é um número único que identifica o programa em execução.

Falha em Arranque

Se a Shell função não conseguir iniciar o programa nomeado, ocorre um FileNotFoundException erro. Isto pode acontecer, por exemplo, quando tenta executar um programa de 16 bits, como command.com, a partir de uma aplicação usando System.Windows.Forms. Como solução alternativa, pode executar um programa de 32 bits que chama o programa de 16 bits desejado. No caso de command.com, pode correr cmd.exe como alternativa.

À espera da conclusão

Por defeito, a Shell função executa o programa de forma assíncrona. Isto significa que um programa iniciado com a Shell função pode não terminar de ser executado antes de as instruções seguintes à Shell função serem executadas. Se quiser esperar que o programa termine antes de continuar, defina Wait para True.

Determinação do Código de Saída

Um processo pode devolver um código de saída quando termina. No entanto, não pode usar Shell para recuperar este código de saída, porque Shell retorna zero se esperar pela terminação, e também porque o processo corre num objeto diferente de Shell.

Para recuperar o código de saída de um processo, tens de escrever o teu próprio código para iniciar o processo e esperar pela terminação. O exemplo seguinte mostra como iniciar um processo, esperar que termine e recuperar o seu código de saída.

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))

Proteção da Especificação do Ficheiro

Deve sempre incluir todo o caminho e a especificação do ficheiro entre aspas, como mostra o exemplo seguinte.

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

Cada par de aspas duplas adjacentes (" ") dentro do literal da cadeia é interpretado como um carácter de aspas dupla na cadeia. Portanto, o exemplo anterior apresenta a seguinte cadeia para a Shell função:

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

Se não tivesse o caminho incluído entre aspas, Windows procuraria um ficheiro chamado Program.exe no diretório C:\, em vez de display.exe no diretório C:\Program Files.

Importante

Se não incluir a especificação do caminho e do ficheiro entre aspas, existe um risco de segurança se o nome do ficheiro ou um nó de caminho contiver espaços. No exemplo anterior, o nó \Program Files de caminho inclui um espaço. Se a especificação não estivesse entre aspas e um programa chamado Program.exe tivesse sido instalado em C:\, por exemplo por adulteração ilícita, Windows executaria em vez de display.exe.

Importante

A Shell função requer permissão de código não gerida, o que pode afetar a sua execução em situações de confiança parcial. Para mais informações, consulte SecurityPermission e Permissões de Acesso ao Código.

Aplica-se a

Ver também