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