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

ArgumentException

5

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

FileNotFoundException

53

Shell não pôde localizar o arquivo PathName.

NullReferenceException

91

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.

Observação de segurança:

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.

Observação de segurança:

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)

Consulte também

Referência

Enumeração AppWinStyle

ArgumentException

FileNotFoundException

NullReferenceException

Método My.Computer.FileSystem.FindInFiles

Função AppActivate