Interaction.Shell(String, AppWinStyle, Boolean, Int32) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.