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.Runs an executable program and returns an integer containing the program's process ID if it is still running.

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

Pathname
String

Obbligatorio.Required. String.String. Nome del programma da eseguire, insieme a eventuali argomenti e opzioni della riga di comando necessari.Name of the program to execute, together with any required arguments and command-line switches. L'oggetto PathName può includere anche l'unità e il percorso della directory o la cartella.PathName can also include the drive and the directory path or folder. Se non si conosce il percorso del programma, è possibile utilizzare il GetFiles per trovarlo.If you do not know the path to the program, you can use the GetFiles to locate it. Ad esempio, è possibile chiamare My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), che restituisce il percorso completo di ogni file denominato testFile.txt in un punto qualsiasi sull'unità C:\.For example, you can call My.Computer.FileSystem.GetFiles("C:", True, "testFile.txt"), which returns the full path of every file named testFile.txt anywhere on drive C:\.

Style
AppWinStyle

facoltativo.Optional. AppWinStyle.AppWinStyle. Valore scelto da AppWinStyle che specifica lo stile della finestra in cui deve essere eseguito il programma.A value chosen from the AppWinStyle specifying the style of the window in which the program is to run. Se Style viene omesso, Shell utilizza AppWinStyle.MinimizedFocus, che avvia il programma nella finestra ridotta a icona e con lo stato attivo.If Style is omitted, Shell uses AppWinStyle.MinimizedFocus, which starts the program minimized and with focus.

Wait
Boolean

facoltativo.Optional. Boolean.Boolean. Valore indicante se la funzione Shell deve attendere il completamento del programma.A value indicating whether the Shell function should wait for completion of the program. Se Wait viene omesso, Shell utilizza False.If Wait is omitted, Shell uses False.

Timeout
Int32

Facoltativo.Optional. Integer.Integer. Numero di millisecondi di attesa del completamento se Wait è True.The number of milliseconds to wait for completion if Wait is True. Se Timeout viene omesso, Shell utilizza -1, che significa che non vi è alcun timeout e Shell non termina finché il programma non finisce.If Timeout is omitted, Shell uses -1, which means there is no timeout and Shell does not return until the program finishes. Se, pertanto, si omette Timeout o lo si imposta su -1, è possibile che Shell non restituisca mai il controllo al programma.Therefore, if you omit Timeout or set it to -1, it is possible that Shell might never return control to your program.

Restituisce

Intero contenente l'ID di processo del programma, se è ancora in esecuzione.An integer containing the program's process ID if it is still running. 0 se il programma ha già completato l'esecuzione.0 if the program already finished executing.

Eccezioni

Style non rientra nell'intervallo compreso tra 0 e 9, estremi inclusi.Style is not within range 0 through 9, inclusive.

Shell non è in grado di trovare il file PathName.Shell cannot find the PathName file.

PathName è Nothing.PathName is Nothing.

Esempi

Nell'esempio seguente viene utilizzata la funzione Shell per eseguire un'applicazione specificata dall'utente.The following example uses the Shell function to run an application specified by the user. Se si specifica AppWinStyle.NormalFocus come secondo argomento, l'applicazione viene aperta in dimensioni normali e viene assegnata allo stato attivo.Specifying AppWinStyle.NormalFocus as the second argument opens the application in normal size and gives it the focus.

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 funzione Shell varia a seconda che il programma denominato PathName sia ancora in esecuzione quando viene restituito Shell.The return value of the Shell function depends on whether the program named in PathName is still executing when Shell returns. Se si imposta Wait su True e il programma termina prima della scadenza del timeout, Shell restituisce zero.If you set Wait to True and the program finishes before the timeout expires, Shell returns zero. Se il timeout scade o se si omette Wait o se lo si imposta su False, Shell restituisce l'ID del processo del programma.If the timeout expires, or if you omit Wait or set it to False, Shell returns the process ID of the program. L'ID del processo è un numero univoco che identifica il programma in esecuzione.The process ID is a unique number that identifies the running program.

Errore di avvioFailure to Start

Se la funzione Shell non è in grado di avviare il programma denominato, si verifica un errore FileNotFoundException.If the Shell function cannot start the named program, a FileNotFoundException error occurs. Questo problema può verificarsi, ad esempio, quando si tenta di eseguire un programma a 16 bit, ad esempio command.com, da un'applicazione che utilizza System.Windows.Forms.This can happen, for example, when you attempt to run a 16-bit program, such as command.com, from an application using System.Windows.Forms. Per una soluzione alternativa, è possibile eseguire un programma a 32 bit che chiama il programma a 16 bit desiderato.For a workaround, you can run a 32-bit program that calls the desired 16-bit program. Nel caso di command.com, è possibile eseguire cmd.exe come alternativa.In the case of command.com, you can run cmd.exe as an alternative.

In attesa del completamentoWaiting for Completion

Per impostazione predefinita, la funzione Shell esegue il programma in modo asincrono.By default, the Shell function runs the program asynchronously. Ciò significa che un programma avviato con la funzione Shell potrebbe non terminare l'esecuzione prima che vengano eseguite le istruzioni che seguono la funzione Shell.This means that a program started with the Shell function might not finish executing before the statements following the Shell function are executed. Se si desidera attendere il completamento del programma prima di continuare, impostare Wait su True.If you want to wait for the program to finish before you continue, set Wait to True.

Determinazione del codice di uscitaDetermining the Exit Code

Un processo può restituire un codice di uscita quando termina.A process can return an exit code when it terminates. Tuttavia, non è possibile usare Shell per recuperare il codice di uscita, perché Shell restituisce zero se attende la terminazione e anche perché il processo viene eseguito in un oggetto diverso da Shell.However, you cannot use Shell to retrieve this exit code, because Shell returns zero if it waits for termination, and also because the process runs in a different object from Shell.

Per recuperare il codice di uscita da un processo, è necessario scrivere codice personalizzato per avviare il processo e attendere la chiusura.To retrieve the exit code from a process, you must write your own code to initiate the process and wait for termination. Nell'esempio seguente viene illustrato come avviare un processo, attenderne l'interruzione e recuperare il relativo codice di uscita.The following example shows how to initiate a process, wait for it to terminate, and retrieve its exit code.

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 fileProtecting the File Specification

È sempre necessario racchiudere l'intero percorso e la specifica del file tra virgolette, come illustrato nell'esempio seguente.You should always enclose the entire path and file specification in quotation marks, as the following example shows.

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.Each pair of adjacent double quotation marks (" ") within the string literal is interpreted as one double quotation character in the string. L'esempio precedente presenta quindi la stringa seguente alla funzione Shell:Therefore, the preceding example presents the following string to the Shell function:

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

Se il percorso non è racchiuso tra virgolette, Windows cercherà un file denominato Program.exe in C:\ anziché display.exe nella directory C:\Programmi.If you did not have the path enclosed in quotation marks, Windows would look for a file called Program.exe in the C:\ directory, instead of display.exe in the C:\Program Files directory.

Importante

Se non si racchiude il percorso e la specifica del file tra virgolette, sussiste un rischio per la sicurezza se il nome file o un nodo percorso contiene spazi.If you do not enclose the path and file specification in quotation marks, there is a security risk if the file name or a path node contains spaces. Nell'esempio precedente, il nodo Path \Program Files include uno spazio.In the preceding example, the path node \Program Files includes a space. Se la specifica non è racchiusa tra virgolette e un programma denominato Program.exe è stato installato in C: \, ad esempio per manomissioni illecite, Windows lo eseguirebbe invece di display.exe.If the specification were not inside quotation marks and a program named Program.exe had been installed in C:\, for example by illicit tampering, Windows would execute it instead of display.exe.

Importante

La funzione Shell richiede l'autorizzazione per il codice non gestito, che può influire sulla sua esecuzione in situazioni di attendibilità parziale.The Shell function requires unmanaged code permission, which might affect its execution in partial-trust situations. Per ulteriori informazioni, vedere SecurityPermission e autorizzazioni di accesso al codice.For more information, see SecurityPermission and Code Access Permissions.

Si applica a

Vedi anche