Procedura dettagliata: gestione di un processo Windows
Aggiornamento: novembre 2007
Nelle procedure riportate in questo argomento vengono descritti i passaggi necessari per creare un processo, per rispondere all'arresto di un processo e per arrestare i processi. Nella prima sezione viene illustrata la creazione di un'applicazione Windows con controlli Button, che consentono di avviare ed arrestare un processo Blocco note. Verranno avviate singolarmente più istanze di Blocco note e tali istanze verranno arrestate come gruppo. Nella seconda sezione viene illustrata la creazione di un'applicazione console, che consente di enumerare i processi in esecuzione nel computer in uso.
Per ulteriori informazioni sull'utilizzo del componente Process per interagire con i processi di sistema, vedere Introduzione al monitoraggio e alla gestione di processi Windows.
Nota: |
---|
Le finestre di dialogo e i comandi di menu visualizzati potrebbero non corrispondere a quelli descritti nella Guida in linea in quanto dipendono dall'edizione o dalle impostazioni attive. Per modificare le impostazioni, scegliere Importa/esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio. |
Per creare l'applicazione
Dalla finestra di dialogo Nuovo progetto creare un'Applicazione Windows in Visual Basic, Visual C# o Visual J#
Con la finestra di progettazione Form1 aperta, fare clic sulla scheda Windows Form nella Casella degli strumenti, quindi aggiungere due pulsanti al form.
Nella finestra Proprietà modificare le proprietà riportate di seguito.
Controllo
Proprietà
Valore
Button1
Name
ButtonStart
Text
per l'avvio di processi
Button2
Name
ButtonStop
Text
per l'arresto di processi
Fare clic sulla scheda Componente nella Casella degli strumenti, quindi trascinare un'istanza del componente Process nell'area di progettazione.
Denominare il componente myProcess.
Per avviare il processo Notepad.exe
Nella finestra Proprietà per l'istanza del componente Process espandere la proprietà StartInfo, quindi impostare la proprietà FileName su notepad.exe.
Fare doppio clic sul pulsante Avvia per accedere all'editor di codice, quindi aggiungere il codice seguente all'evento ButtonStart_Click():
myProcess.Start
myProcess.Start();
Salvare tutti i file, quindi generare ed eseguire l'applicazione.
Fare clic sul pulsante per l'avvio di processi più volte. Ad ogni clic verranno visualizzate istanze separate di Blocco note.
Nota sulla sicurezza: Se viene eseguito in un contesto ad affidabilità parziale, il processo può generare un'eccezione SecurityException a causa dell'insufficienza di privilegi. Per ulteriori informazioni, vedere Nozioni fondamentali sulla protezione dall’accesso di codice.
Chiudere le singole applicazioni Blocco note.
Chiudere l'applicazione Form1.
Per chiudere tutte le istanze correnti del processo Notepad.exe
Accedere all'editor del codice per Form1.
Dalla visualizzazione Progettazione fare doppio clic sul pulsante Stop per accedere alla routine ButtonStop_Click().
Aggiungere il codice riportato di seguito per chiudere le istanze correnti di Blocco note.
Private Sub ButtonStop_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles ButtonStop.Click Dim myProcesses() As Process Dim instance As Process myProcesses = Process.GetProcessesByName("Notepad") For Each instance In myProcesses instance.CloseMainWindow() instance.Close() Next End Sub
private void ButtonStop_Click(object sender, System.EventArgs e) { System.Diagnostics.Process[] myProcesses; myProcesses = System.Diagnostics.Process.GetProcessesByName("Notepad"); foreach (System.Diagnostics.Process instance in myProcesses) { instance.CloseMainWindow(); instance.Close(); } }
Salvare tutti i file, quindi generare ed eseguire l'applicazione.
Avviare più istanze di Blocco note facendo clic sul pulsante per l'avvio di processi.
Fare clic sul pulsante per l'arresto di processi per chiudere immediatamente tutte le istanze di Blocco note in esecuzione.
Chiudere l'applicazione Form1.
Nella procedura seguente verrà bloccato il codice fino al termine del processo.
Per configurare il componente in modo che attenda il termine dell'esecuzione del processo Blocco note
Accedere all'editor del codice per Form1.
Modificare il codice aggiungendovi una riga che causi una pausa prima della chiusura di ogni finestra.
Private Sub ButtonStop_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles ButtonStop.Click Dim myProcesses() As Process Dim instance As Process myProcesses = Process.GetProcessesByName("Notepad") For Each instance In myProcesses instance.CloseMainWindow() instance.WaitForExit(3000) instance.Close() Next End Sub
private void ButtonStop_Click(object sender, System.EventArgs e) { System.Diagnostics.Process[] myProcesses; myProcesses = System.Diagnostics.Process.GetProcessesByName("Notepad"); foreach (System.Diagnostics.Process instance in myProcesses) { instance.CloseMainWindow(); instance.WaitForExit(3000); instance.Close(); } }
Salvare tutti i file, quindi generare ed eseguire l'applicazione.
Avviare più istanze di Blocco note facendo clic sul pulsante per l'avvio di processi.
Fare clic sul pulsante per l'arresto di processi per chiudere i processi come in precedenza.
L'applicazione attenderà per 3 secondi il termine di ciascun processo prima di chiudere l'istanza successiva del processo.
Chiudere l'applicazione Form1.
In questa parte dell'esercitazione verrà creata una nuova applicazione console che recupererà ed elencherà i processi sul computer locale.
Per enumerare i processi sul computer
Creare un nuovo progetto Applicazione console.
Aprire l'editor di codice e modificare il metodo Main per enumerare i processi in esecuzione sul computer:
Sub Main() Dim processes() As Process Dim instance As Process processes = Process.GetProcesses For Each instance In processes Console.WriteLine(instance.ProcessName) Next System.Threading.Thread.Sleep(5000) End Sub
static void Main() { System.Diagnostics.Process[] processes; processes = System.Diagnostics.Process.GetProcesses(); foreach (System.Diagnostics.Process instance in processes) { Console.WriteLine(instance.ProcessName); } System.Threading.Thread.Sleep(5000); }
Salvare tutti i file, quindi generare ed eseguire l'applicazione.
L'applicazione aprirà una finestra di console contenente un elenco di tutti i processi attualmente in esecuzione sul computer. La chiamata a Sleep sospende la console per 5 secondi prima di chiuderla.
Nota: Potrebbero verificarsi delle eccezioni durante l'esecuzione di queste due routine se viene chiamato GetProcesses o GetProcessesByName e uno dei processi restituiti termina prima dell'esecuzione della chiamata successiva. In tal caso verrà generata un'eccezione che indica che il processo non esiste.
Vedere anche
Attività
Procedura: specificare i processi
Procedura: arrestare i processi