Interaction.Shell(String, AppWinStyle, Boolean, Int32) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Esegue un programma eseguibile e restituisce un numero intero contenente l'ID del 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);
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
Parametri
- PathnamePathName
- String
Required.
String. Nome del programma da eseguire, insieme agli argomenti obbligatori e alle opzioni della riga di comando.
PathName può includere anche l'unità e il percorso o la cartella della directory.
Se non si conosce il percorso del programma, è possibile usare per GetFiles individuarlo. 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
Optional.
AppWinStyle. Valore scelto dall'oggetto AppWinStyle che specifica lo stile della finestra in cui deve essere eseguito il programma. Se Style viene omesso, Shell usa AppWinStyle.MinimizedFocus, che avvia il programma ridotto a icona e con lo stato attivo.
- Wait
- Boolean
Optional.
Boolean. Valore che indica se la Shell funzione deve attendere il completamento del programma. Se Wait viene omesso, Shell usa False.
- Timeout
- Int32
Optional.
Integer. Numero di millisecondi di attesa per il completamento se Wait è True. Se Timeout viene omesso, Shell usa -1, il che significa che non è presente alcun timeout e Shell non restituisce fino al termine del programma. Pertanto, se si omette Timeout o lo si imposta su -1, è possibile che Shell non restituisca mai il controllo al programma.
Valori restituiti
Intero contenente l'ID processo del programma se è ancora in esecuzione. 0 se il programma è già stato completato l'esecuzione.
Eccezioni
Style non è compreso nell'intervallo compreso tra 0 e 9, inclusi.
Shell impossibile trovare il PathName file.
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, l'applicazione viene aperta in dimensioni normali e lo 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.
Commenti
Il valore restituito della Shell funzione dipende dal fatto che il programma denominato in PathName sia ancora in esecuzione quando Shell viene restituito. Se si imposta su WaitTrue 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 del processo del programma. L'ID del processo è un numero univoco che identifica il programma in esecuzione.
Errore di avvio
Se la Shell funzione non può avviare il 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.
In attesa del completamento
Per impostazione predefinita, la Shell funzione esegue il programma in modo asincrono. Ciò significa che un programma avviato con la Shell funzione potrebbe non terminare l'esecuzione prima dell'esecuzione delle istruzioni successive alla Shell funzione. Se si desidera attendere il completamento del programma prima di continuare, impostare su WaitTrue.
Determinazione del codice di uscita
Un processo può restituire un codice di uscita quando termina. Non è tuttavia 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 codice personalizzato 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 del file
È consigliabile racchiudere sempre 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 una virgoletta doppia nella stringa. Di conseguenza, l'esempio precedente presenta la stringa seguente alla Shell funzione :
"C:\Program Files\display.exe" -a -q
Se il percorso non è 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 per la sicurezza se il nome del file o un nodo di percorso contiene spazi. Nell'esempio precedente il nodo \Program Files del percorso include uno spazio. Se la specifica non era racchiusa tra virgolette e un programma denominato Program.exe era stato installato in C:\, ad esempio manomissione illecita, Windows lo eseguiva invece di display.exe.
Importante
La Shell funzione richiede l'autorizzazione di codice non gestito, che potrebbe influire sull'esecuzione in situazioni di attendibilità parziale. Per altre informazioni, vedere SecurityPermission e Autorizzazioni di accesso al codice.