Tutorial: Administrar un proceso de Windows

Actualización: noviembre 2007

Los procedimientos de este tema le guiarán por los pasos necesarios para crear un proceso, responder cuando se detiene un proceso y detener procesos. En la primera sección, creará una aplicación para Windows con controles Button para iniciar y detener un proceso del Bloc de notas. Iniciará varias instancias del Bloc de notas por separado y, a continuación, las detendrá como grupo. En la segunda sección, creará una aplicación de consola que enumera los procesos que se ejecutan en el equipo.

Para obtener más información sobre cómo utilizar el componente Process para interactuar con procesos del sistema, vea Introducción a la supervisión y administración de procesos de Windows.

Nota:

Los cuadros de diálogo y los comandos de menú que se ven pueden diferir de los descritos en la Ayuda, dependiendo de los valores de configuración o de edición activos. Para cambiar la configuración, seleccione Importar y exportar configuraciones en el menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para crear la aplicación

  1. En el cuadro de diálogo Nuevo proyecto, cree una Aplicación para Windows de Visual Basic, Visual C# o Visual J#.

  2. Con el diseñador de Form1 abierto, haga clic en la ficha Windows Forms del Cuadro de herramientas y, a continuación, agregue dos botones al formulario.

  3. En la ventana Propiedades, cambie las propiedades siguientes:

    Control

    Propiedad

    Valor

    Button1

    Name

    ButtonStart

     

    Text

    Iniciar proceso

    Button2

    Name

    ButtonStop

     

    Text

    Detener proceso

  4. Haga clic en la ficha Componente del Cuadro de herramientas y, a continuación, arrastre una instancia del componente Process a la superficie del diseñador.

  5. Asigne al componente el nombre MyProcess.

Para iniciar el proceso Notepad.exe

  1. En la ventana Propiedades de la instancia del componente Process, expanda la propiedad StartInfo y establezca la propiedad FileName en notepad.exe.

  2. Haga doble clic en el botón Inicio para tener acceso al Editor de código y, a continuación, agregue el código siguiente al evento ButtonStart_Click():

    myProcess.Start
    
    myProcess.Start();
    
  3. Guarde todos los archivos y, a continuación, genere y ejecute la aplicación.

  4. Haga clic en el botón Iniciar proceso varias veces. Verá instancias separadas del Bloc de notas para cada clic.

    Nota de seguridad:

    Si va a ejecutar el código en un contexto de confianza parcial, es posible que el proceso produzca una excepción SecurityException por falta de privilegios suficientes. Para obtener más información, vea Conceptos básicos sobre la seguridad de acceso a código.

  5. Cierre cada una de las aplicaciones del Bloc de notas.

  6. Cierre la aplicación Form1.

Para cerrar todas las instancias actuales del proceso Notepad.exe

  1. Vaya al Editor de código de Form1.

  2. En la vista Diseño, haga doble clic en el botón Detener para tener acceso al procedimiento ButtonStop_Click().

  3. Agregue el código siguiente para cerrar las instancias actuales del Bloc de notas.

    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. Guarde todos los archivos y, a continuación, genere y ejecute la aplicación.

  5. Haga clic en el botón Iniciar proceso para iniciar varias instancias del Bloc de notas.

  6. Haga clic en el botón Detener proceso para cerrar inmediatamente todas las instancias del Bloc de notas en ejecución.

  7. Cierre la aplicación Form1.

En el siguiente procedimiento, detendrá el código hasta que el proceso termine.

Para configurar el componente para que espere a que termine de ejecutarse el proceso del Bloc de notas

  1. Vaya al Editor de código de Form1.

  2. Modifique el código agregando una línea de código que produzca una pausa antes de cerrar cada ventana.

    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. Guarde todos los archivos y, a continuación, genere y ejecute la aplicación.

  4. Haga clic en el botón Iniciar procesos para iniciar varias instancias del Bloc de notas.

  5. Haga clic en el botón Detener procesospara cerrar los procesos, como hizo anteriormente.

    Observará que la aplicación espera ahora 3 segundos a que se detenga cada proceso antes de cerrar la siguiente instancia del proceso.

  6. Cierre la aplicación Form1.

En esta parte del tutorial, creará una nueva aplicación de consola que recuperará y mostrará una lista de los procesos del equipo local.

Para enumerar los procesos del equipo

  1. Cree un proyecto nuevo de Aplicación de consola.

  2. Abra el Editor de código y modifique el método Main para enumerar los procesos de su equipo:

    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. Guarde todos los archivos y, a continuación, genere y ejecute la aplicación.

    La aplicación abrirá una ventana de consola con una lista de todos los procesos actualmente en ejecución en el equipo. Al llamar a Sleep, la consola se detiene durante cinco segundos antes de cerrarse.

    Nota:

    Es posible que se produzcan excepciones en estos dos procedimientos si llama a GetProcesses o GetProcessesByName y uno de los procesos devueltos termina antes de hacer la siguiente llamada. En este caso, recibirá una excepción que indica que el proceso no existe.

Vea también

Tareas

Cómo: Especificar procesos

Cómo: Detener procesos

Otros recursos

Administrar procesos