Interaction.Shell(String, AppWinStyle, Boolean, Int32) Metodo

Definizione

Esegue un programma eseguibile e restituisce un intero contenente l'ID di processo del programma, se è ancora in esecuzione.

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);

Parametri

PathNamePathname
String

Obbligatorio. String. Nome del programma da eseguire, insieme a eventuali argomenti e opzioni della riga di comando necessari. L'oggetto PathName può includere anche l'unità e il percorso della directory o la cartella.
Se non si conosce il percorso del programma, è possibile utilizzare il GetFiles per trovarlo. Ad esempio, è possibile chiamare My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), che restituisce il percorso completo di ogni file denominato testFile.txt ovunque nell'unità C:\.

Style
AppWinStyle

facoltativo. AppWinStyle. Valore scelto da AppWinStyle che specifica lo stile della finestra in cui deve essere eseguito il programma. Se Style viene omesso, Shell utilizza AppWinStyle.MinimizedFocus, che avvia il programma nella finestra ridotta a icona e con lo stato attivo.

Wait
Boolean

facoltativo. Boolean. Valore indicante se la funzione Shell deve attendere il completamento del programma. Se Wait viene omesso, Shell utilizza False.

Timeout
Int32

facoltativo. Integer. Numero di millisecondi di attesa del completamento se Wait è True. Se Timeout viene omesso, Shell utilizza -1, che significa che non vi è alcun timeout e Shell non termina finché il programma non finisce. Se, pertanto, si omette Timeout o lo si imposta su -1, è possibile che Shell non restituisca mai il controllo al programma.

Restituisce

Intero contenente l'ID di processo del programma, se è ancora in esecuzione. 0 se il programma ha già completato l'esecuzione.

Eccezioni

Style non rientra nell'intervallo compreso tra 0 e 9, estremi inclusi.

Shell non è in grado di trovare il file PathName.

PathName è Nothing.

Esempio

Nell'esempio seguente viene usata la Shell funzione per eseguire un'applicazione specificata dall'utente. AppWinStyle.NormalFocus Se si specifica come secondo argomento viene aperta l'applicazione in dimensioni normali e viene visualizzata la messa a fuoco.

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.

Commenti

Il valore restituito della Shell funzione dipende dal fatto che il programma denominato in sia ancora in PathName esecuzione quando Shell restituisce. Se si imposta Wait su True e il programma termina prima della scadenza del timeout, Shell restituisce zero. Se il timeout scade o se si omette Wait o lo si imposta su False, Shell restituisce l'ID processo del programma. L'ID processo è un numero univoco che identifica il programma in esecuzione.

Errore di avvio

Se la funzione non può avviare il Shell programma denominato, si verifica un FileNotFoundException errore. Ciò può verificarsi, ad esempio, quando si tenta di eseguire un programma a 16 bit, ad esempio command.com, da un'applicazione usando System.Windows.Forms. Per una soluzione alternativa, è possibile eseguire un programma a 32 bit che chiama il programma a 16 bit desiderato. Nel caso di command.com, è possibile eseguire cmd.exe come alternativa.

Attesa del completamento

Per impostazione predefinita, la Shell funzione esegue il programma in modo asincrono. Ciò significa che un programma avviato con la funzione potrebbe non terminare l'esecuzione prima dell'esecuzione Shell delle istruzioni che seguono la Shell funzione. Se si vuole attendere il completamento del programma prima di continuare, impostare Wait su True.

Determinazione del codice di uscita

Un processo può restituire un codice di uscita quando termina. Tuttavia, non è possibile usare Shell per recuperare questo codice di uscita, perché Shell restituisce zero se attende la terminazione e anche perché il processo viene eseguito in un oggetto diverso da Shell.

Per recuperare il codice di uscita da un processo, è necessario scrivere il proprio codice per avviare il processo e attendere la terminazione. Nell'esempio seguente viene illustrato come avviare un processo, attendere che venga terminato e recuperare 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 file

È sempre necessario racchiudere l'intero percorso e la specifica del file tra virgolette, come illustrato nell'esempio seguente.

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

Ogni coppia di virgolette doppie adiacenti (" ") all'interno del valore letterale stringa viene interpretata come un carattere di virgolette doppie nella stringa. Pertanto, l'esempio precedente presenta la stringa seguente alla Shell funzione:

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

Se non è stato incluso il percorso racchiuso tra virgolette, Windows cercherebbe un file denominato Program.exe nella directory C:\ anziché display.exe nella directory C:\Programmi.

Importante

Se non si racchiude il percorso e la specifica del file tra virgolette, esiste un rischio di sicurezza se il nome del file o un nodo del percorso contiene spazi. Nell'esempio precedente il nodo \Program Files del percorso include uno spazio. Se la specifica non era all'interno delle virgolette e un programma denominato Program.exe era stato installato in C:\, ad esempio tramite manomissione illecita, Windows lo eseguirebbe anziché display.exe.

Importante

La Shell funzione richiede l'autorizzazione del codice non gestita, che potrebbe influire sull'esecuzione in situazioni di attendibilità parziale. Per altre informazioni, vedere SecurityPermission e Autorizzazioni di accesso al codice.

Si applica a

Prodotto Versioni
.NET 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Vedi anche