Partilhar via


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

Definição

Executa um programa executável e retorna um inteiro que contém a ID do processo do programa se ele ainda está em execução.

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

Obrigatórios. String. Nome do programa a ser executado, junto com argumentos necessários e opções de linha de comando. PathName também pode incluir a unidade e o caminho do diretório ou da pasta.
Se você não souber o caminho para o programa, poderá usar o GetFiles para localizá-lo. Por exemplo, você pode chamar My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), que retorna o caminho completo de cada arquivo chamado testFile.txt em qualquer lugar na unidade C:\.

Style
AppWinStyle

Opcional. AppWinStyle. Um valor escolhido do AppWinStyle que especifica o estilo da janela em que o programa será executado. Se Style for omitido, Shell usará AppWinStyle.MinimizedFocus, que inicia o programa minimizado e com foco.

Wait
Boolean

Opcional. Boolean. Um valor que indica se a função Shell deve aguardar a conclusão do programa. Se Wait for omitido, Shell usará False.

Timeout
Int32

Opcional. Integer. O número de milissegundos de espera de uma conclusão se Wait for True. Se Timeout for omitido, Shell usará -1, o que significa que não há nenhum tempo limite e Shell não retorna até que o programa seja concluído. Portanto, se você omitir Timeout ou defini-lo como-1, é possível que Shell nunca retorne o controle ao seu programa.

Retornos

Um inteiro que contém a ID do processo do programa quando ele ainda está em execução. 0 se o programa já tiver terminado sua execução.

Exceções

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

Shell não pode localizar o arquivo PathName.

PathName é Nothing.

Exemplos

O exemplo a seguir usa a Shell função para executar um aplicativo especificado pelo usuário. Especificar AppWinStyle.NormalFocus como o segundo argumento abre o aplicativo em tamanho normal e dá a ele 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.

Comentários

O valor retornado da Shell função depende se o programa nomeado em ainda está em PathName execução quando Shell retorna. Se você definir Wait como True e o programa for concluído antes que o tempo limite expire, Shell retornará zero. Se o tempo limite expirar ou se você omitir Wait ou defini-lo como False, Shell retornará a ID do processo do programa. A ID do processo é um número exclusivo que identifica o programa em execução.

Falha ao iniciar

Se a Shell função não puder iniciar o programa nomeado, ocorrerá um FileNotFoundException erro. Isso pode acontecer, por exemplo, quando você tenta executar um programa de 16 bits, como command.com, de um aplicativo usando System.Windows.Forms. Para uma solução alternativa, você pode executar um programa de 32 bits que chama o programa de 16 bits desejado. No caso de command.com, você pode executar cmd.exe como uma alternativa.

Aguardando conclusão

Por padrão, a Shell função executa o programa de forma assíncrona. Isso significa que um programa iniciado com a função pode não concluir a Shell execução antes que as instruções após a Shell função sejam executadas. Se você quiser aguardar a conclusão do programa antes de continuar, defina Wait como True.

Determinando o código de saída

Um processo pode retornar um código de saída quando é encerrado. No entanto, você não pode usar Shell para recuperar esse código de saída, pois Shell retornará zero se ele aguardar o encerramento e também porque o processo é executado em um objeto diferente de Shell.

Para recuperar o código de saída de um processo, você deve escrever seu próprio código para iniciar o processo e aguardar o encerramento. O exemplo a seguir mostra como iniciar um processo, aguardar que ele seja encerrado e recuperar 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))  

Protegendo a especificação de arquivo

Você sempre deve colocar todo o caminho e a especificação do arquivo entre aspas, como mostra o exemplo a seguir.

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

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

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

Se você não tiver o caminho entre aspas, o Windows procurará um arquivo chamado Program.exe no diretório C:\, em vez de no diretório C:\Arquivos de display.exe Programas.

Importante

Se você não colocar o caminho e a especificação do arquivo entre aspas, haverá um risco de segurança se o nome do arquivo 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, o Windows a executaria em vez de display.exe.

Importante

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

Aplica-se a

Confira também