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
En el cuadro de diálogo Nuevo proyecto, cree una Aplicación para Windows de Visual Basic, Visual C# o Visual J#.
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.
En la ventana Propiedades, cambie las propiedades siguientes:
Control
Propiedad
Valor
Button1
Name
ButtonStart
Text
Iniciar proceso
Button2
Name
ButtonStop
Text
Detener proceso
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.
Asigne al componente el nombre MyProcess.
Para iniciar el proceso Notepad.exe
En la ventana Propiedades de la instancia del componente Process, expanda la propiedad StartInfo y establezca la propiedad FileName en notepad.exe.
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();
Guarde todos los archivos y, a continuación, genere y ejecute la aplicación.
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.
Cierre cada una de las aplicaciones del Bloc de notas.
Cierre la aplicación Form1.
Para cerrar todas las instancias actuales del proceso Notepad.exe
Vaya al Editor de código de Form1.
En la vista Diseño, haga doble clic en el botón Detener para tener acceso al procedimiento ButtonStop_Click().
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(); } }
Guarde todos los archivos y, a continuación, genere y ejecute la aplicación.
Haga clic en el botón Iniciar proceso para iniciar varias instancias del Bloc de notas.
Haga clic en el botón Detener proceso para cerrar inmediatamente todas las instancias del Bloc de notas en ejecución.
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
Vaya al Editor de código de Form1.
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(); } }
Guarde todos los archivos y, a continuación, genere y ejecute la aplicación.
Haga clic en el botón Iniciar procesos para iniciar varias instancias del Bloc de notas.
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.
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
Cree un proyecto nuevo de Aplicación de consola.
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); }
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.