Função Shell
Executa um programa executável e retorna um inteiro contendo a identificação do processo do programa se o programa ainda está funcionando.
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
Obrigatório.String.Nome do programa para executar, junto com quaisquer argumentos necessários e opções de linha de comando.PathName também pode incluir a unidade e o caminho do diretório ou pasta.Se você não souber o caminho para o programa, você pode escolher Método My.Computer.FileSystem.FindInFiles para localizá-lo.Por exemplo, você pode chamar My.Computer.FileSystem.GetFiles("C:\", True, "testFile.txt"), que retorna a caminho completo de cada arquivo chamado testFile.txt em qualquer lugar na unidade C:\.
Style
Opcional.AppWinStyle.Um valor escolhido a partir de Enumeração AppWinStyle especificar o estilo da janela em que o programa é executado. Se Style for omitido, Shell usará AppWinStyle.MinimizedFocus, que inicia o programa minimizado e com foco.Wait
Opcional.Boolean.Um valor indicando se o Shell função deve aguardar a conclusão do programa. Se Wait for omitido, Shell usará False.Timeout
Opcional.Integer.O número de milissegundos para aguardar a conclusão se Wait é True. Se Timeout for omitido, Shell usa -1, 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.
Exceções
Tipo de exceção |
Número de erro |
Condição |
---|---|---|
Style não está no intervalo de 0 a 9, inclusive. |
||
Shell não pôde localizar o arquivo PathName. |
||
PathName é Nothing. |
Ver a coluna " número de erro " se você estiver atualizando aplicativos Visual Basic 6.0 que usam manipulação de erros não estruturada.(Você pode comparar o número do erro com a Propriedade do Número (Erro de objeto).) Entretanto, quando for possivel, você pode considerar substituir tal controle de erro por Visão Geral sobre a Manipulação Estruturada de Exceções para o Visual Basic.
Comentários
O valor de retorno da função Shell depende se o programa denominado em PathName ainda estiver em execução quando Shell retorna.Se você definir Wait como True e o programa terminar 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 retorna a identificação do processo do programa.A identificação do processo é um número exclusivo que identifica o programa em execução.
Falha ao Iniciar
Se a função Shell não puder iniciar o programa nomeado, ocorrerá um erro FileNotFoundException.Isso pode acontecer, por exemplo, quando você tenta executar um programa de 16 bits, como command.com, a partir de um aplicativo usando System.Windows.Forms.Para solucionar esse problema, 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 função Shell executa o programa de forma assíncrona.Isso significa que um programa que inicia com a função Shell não pode concluir a execução antes que as intruções que seguem a função Shell executem.Se você deseja aguardar que o programa termine antes de continuar, defina Wait como True.
Determinar o Código de Saída
Um processo pode retornar um código de saída quando ele termina.No entanto, não é possível usar Shell para recuperar este código de saída, porque Shell retorna zero se ele aguarda terminação e também porque o processo é executado em um objeto diferente de Shell.
Para recuperar a código de saída de um processo, você deve escrever seu próprio código para iniciar o processo e esperar o encerramento.O exemplo a seguir mostra como iniciar um processo, aguardar até que termine 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ê deve sempre colocar a especificação de arquivo e caminho toda entre aspas, como mostra a exemplo a seguir.
ID = Shell("""C:\Program Files\display.exe"" -a -q", , True, 100000)
Cada par de entre aspas duplas adjacentes (" ") dentro de sequência de caracteres literal é interpretado como um caractere aspas duplas na sequência de caracteres.Portanto, o exemplo anterior apresenta a seguinte sequência de caracteres para a função Shell:
"C:\Program Files\display.exe" -a -q
Se o caminho não está entre aspas, o Windows procurará um arquivo chamado Program.exe na pasta C:\, em vez de display.exe na pasta c:\Arquivos de programas.
![]() |
---|
Se você não colocar a especificação de arquivo e caminho entre aspas, há um risco de segurança se o nome de arquivo ou um nó de caminho contiver espaços.No exemplo anterior, o nó de caminho \Program Files inclui um espaço. Se a especificação não for encontrada dentro entre aspas e um programa chamado Program.exe estiver instalado em C:\, por exemplo por violação ilegal, o Windows executa-o em vez de display.exe. |
![]() |
---|
O Shell função requer permissão do código não gerenciado, que poderá afetar sua execução em situações de confiança parcial. Para obter mais informações, consulte SecurityPermission e Permissões de acesso a código . |
Exemplo
O exemplo a seguir usa a função Shell para executar um aplicativo especificado pelo usuário.Especificando AppWinStyle.NormalFocus como o segundo argumento, abre-se o aplicativo em tamanho normal e concede-se o foco a ele.
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.
Anotações Developer Dispositivo Inteligente
Não há suporte para esta função.
Requisitos
Namespace: Microsoft.VisualBasic
**Módulo:**Interaction
Assembly: Visual Basic Runtime Library (em Microsoft.VisualBasic.dll)