Condividi tramite


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

  1. Dalla finestra di dialogo Nuovo progetto creare un'Applicazione Windows in Visual Basic, Visual C# o Visual J#

  2. Con la finestra di progettazione Form1 aperta, fare clic sulla scheda Windows Form nella Casella degli strumenti, quindi aggiungere due pulsanti al form.

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

  4. Fare clic sulla scheda Componente nella Casella degli strumenti, quindi trascinare un'istanza del componente Process nell'area di progettazione.

  5. Denominare il componente myProcess.

Per avviare il processo Notepad.exe

  1. Nella finestra Proprietà per l'istanza del componente Process espandere la proprietà StartInfo, quindi impostare la proprietà FileName su notepad.exe.

  2. 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();
    
  3. Salvare tutti i file, quindi generare ed eseguire l'applicazione.

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

  5. Chiudere le singole applicazioni Blocco note.

  6. Chiudere l'applicazione Form1.

Per chiudere tutte le istanze correnti del processo Notepad.exe

  1. Accedere all'editor del codice per Form1.

  2. Dalla visualizzazione Progettazione fare doppio clic sul pulsante Stop per accedere alla routine ButtonStop_Click().

  3. 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();
       }
    }
    
  4. Salvare tutti i file, quindi generare ed eseguire l'applicazione.

  5. Avviare più istanze di Blocco note facendo clic sul pulsante per l'avvio di processi.

  6. Fare clic sul pulsante per l'arresto di processi per chiudere immediatamente tutte le istanze di Blocco note in esecuzione.

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

  1. Accedere all'editor del codice per Form1.

  2. 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();
       }
    }
    
  3. Salvare tutti i file, quindi generare ed eseguire l'applicazione.

  4. Avviare più istanze di Blocco note facendo clic sul pulsante per l'avvio di processi.

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

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

  1. Creare un nuovo progetto Applicazione console.

  2. 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);
    }
    
  3. 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

Altre risorse

Gestione di processi