Funzione Shell
Aggiornamento: novembre 2007
Esegue un programma eseguibile e restituisce un valore integer che contiene l'ID di processo del programma, se ancora in esecuzione.
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
Parametri
PathName
Obbligatorio. String. Nome del programma da eseguire, accompagnato dalle opzioni della riga di comando e dagli argomenti obbligatori. PathName può includere anche l'unità e la cartella o il percorso della directory.Se non si conosce il percorso del programma, è possibile utilizzare il Metodo My.Computer.FileSystem.GetFiles per individuarlo. È possibile, ad esempio, chiamare My.Computer.FileSystem.GetFiles("C:\", True, "testFile.txt"), che restituisce il percorso completo di ogni file denominato testFile.txt in qualsiasi posizione dell'unità C:\.
Style
Facoltativo. AppWinStyle. Valore scelto dall'Enumerazione AppWinStyle che specifica lo stile della finestra in cui verrà eseguito il programma. Se Style viene omesso, Shell utilizzerà AppWinStyle.MinimizedFocus, che avvia il programma ridotto a icona e nello stato attivo.Wait
Facoltativo. Boolean. Valore che specifica se è necessario che la funzione Shell attenda il completamento del programma. Se Wait viene omesso, Shell utilizzerà False.Timeout
Facoltativo. Integer. Numero di millisecondi di attesa del completamento se Wait è True. Se Timeout viene omesso, Shell utilizzerà -1 per indicare che non è previsto alcun timeout e che Shell non termina fino al completamento del programma. Se Timeout viene quindi omesso o impostato su -1, è possibile che Shell non restituisca mai il controllo al programma.
Eccezioni
Tipo di eccezione |
Numero di errore |
Condizione |
---|---|---|
Style non rientra nell'intervallo compreso tra 0 e 9, estremi inclusi. |
||
Shell non è in grado di trovare il file PathName. |
||
PathName è Nothing. |
Se si esegue l'aggiornamento delle applicazioni Visual Basic 6.0 che utilizzano la gestione degli errori non strutturata, vedere la colonna "Numero di errore". È possibile confrontare il numero di errore con la Proprietà Number (oggetto Err). Se possibile, tuttavia, si consiglia di sostituire il controllo dell'errore con la procedura illustrata nella sezione Cenni preliminari sulla gestione strutturata delle eccezioni per Visual Basic.
Note
Il valore restituito della funzione Shell dipende dal fatto che il programma indicato nel parametro PathName sia in esecuzione o meno al termine della funzione Shell. Se Wait viene impostato su True e il programma termina prima della fine del timeout, Shell restituirà zero. Se il timeout scade o se Wait viene omesso oppure impostato su False, Shell restituirà l'ID di processo del programma. L'ID di processo è un numero univoco che identifica il programma in esecuzione.
Errore di avvio
Se la funzione Shell non è in grado di avviare il programma specificato, si verifica un errore FileNotFoundException. Può accadere, ad esempio, quando si tenta di eseguire un programma a 16 bit, quale command.com, da un'applicazione che utilizza lo spazio dei nomi System.Windows.Forms. Per risolvere il problema, è possibile eseguire un programma a 32 bit che chiami il programma a 16 bit desiderato. Nel caso di command.com, è possibile eseguire come alternativa cmd.exe.
Attesa di completamento
Per impostazione predefinita, la funzione Shell esegue il programma in modo asincrono. In altri termini, è possibile che il programma che viene avviato con la funzione Shell non termini se non vengono prima eseguite le istruzioni successive a Shell. Se si desidera attendere il completamento del programma prima di continuare, impostare Wait su True.
Determinazione del codice di uscita
Quando un processo termina, può restituire codice di uscita. Per recuperarlo, non è tuttavia possibile utilizzare Shell. La funzione Shell, infatti, restituisce zero se attende il completamento e il processo viene inoltre eseguito in un oggetto diverso da Shell.
Per recuperare il codice di uscita da un processo, è necessario scrivere del codice per avviare il processo e attenderne il completamento. Nell'esempio riportato di seguito viene illustrato come avviare un processo, attenderne il completamento e recuperarne il codice di uscita.
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))
Protezione della specifica del file
È necessario racchiudere sempre tra virgolette l'intero percorso e la specifica del file, come illustrato nel seguente esempio.
ID = Shell("""C:\Program Files\display.exe"" -a -q", , True, 100000)
Ogni coppia di virgolette doppie adiacenti (" ") all'interno della stringa letterale viene interpretata come un'unica virgoletta doppia nella stringa. Nell'esempio precedente viene quindi passata alla funzione Shell la seguente stringa:
"C:\Program Files\display.exe" -a -q
Se il percorso non fosse stato racchiuso tra virgolette, sarebbe stata effettuata la ricerca del file Program.exe nella directory C:\, anziché del file display.exe nella directory C:\Programmi.
Nota sulla sicurezza: |
---|
Se il percorso e la specifica del file non vengono racchiusi tra virgolette, può verificarsi un problema di protezione se il nome del file o un nodo del percorso contiene spazi. Nell'esempio precedente il nodo del percorso \Program Files include uno spazio. Se la specifica non fosse stata racchiusa tra virgolette e un programma denominato Program.exe fosse stato installato in C:\ senza autorizzazione, sarebbe stato eseguito questo programma anziché display.exe. |
Nota sulla sicurezza: |
---|
La funzione Shell richiede l'autorizzazione di accesso al codice non gestito, che può influenzarne l'esecuzione in situazioni di attendibilità parziale. Per ulteriori informazioni, vedere SecurityPermission e Permessi di accesso al codice. |
Esempio
Nell'esempio riportato di seguito la funzione Shell viene utilizzata per eseguire un'applicazione specificata dall'utente. Se si specifica AppWinStyle.NormalFocus come secondo argomento, l'applicazione verrà aperta nel formato normale e con stato attivo.
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.
Note per gli sviluppatori di applicazioni per Smart Device
Questa funzione non è supportata.
Requisiti
Spazio dei nomi: Microsoft.VisualBasic
Modulo: Interaction
Assembly: Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)