2009-06-22 12 views
8

¿Cómo puedo matar a un proceso después dicen 2 o tres minutos mira el siguiente código:Proceso de muertes después de cierto tiempo + C#

class Program 
{ 
    static void Main(string[] args) 
    { 

     try 
     { 
      //declare new process and name it p1 
      Process p1 = Process.Start("iexplore", "http://www.google.com"); 
      //get starting time of process 
      DateTime startingTime = p1.StartTime; 
      Console.WriteLine(startingTime); 
      //add a minute to startingTime 
      DateTime endTime = startingTime.AddMinutes(1); 
      //I don't know how to kill process after certain time 
      //code below don't work, How Do I kill this process after a minute or 2 
      p1.Kill(startingTime.AddMinutes(2));     
      Console.ReadLine(); 


     } 
     catch (Exception ex) 
     { 

      Console.WriteLine("Problem with Process:{0}", ex.Message); 
     } 



    } 
} 

así que quiero que la ventana de IE cerrado después de 2 minutos

+1

p1.WaitForExit (60000); // DateTime endTime2; p1.CloseMainWindow(); // endTime2 = p1.ExitTime; p1.Close(); – Developer

Respuesta

21

Use Process.WaitForExit con un tiempo de espera de dos minutos, y luego llame al Process.Kill si WaitForExit devolvió false.

(También podría considerar llamar CloseMainWindow en lugar de Kill, dependiendo de su situación -. O por lo menos intentarlo primero, para dar el proceso más de una oportunidad de hacer un cierre ordenado)

+0

Gracias por la ayuda john usó el método closemain windows que funciona perfecto – Developer

0

Usted debe tratar con el servicio de Windows en lugar de una aplicación de consola. Los servicios de Windows tienen un ciclo de vida iterativo, por lo que esto se puede lograr fácilmente utilizando un control de temporizador en el servicio de Windows. Deje que el temporizador marque un intervalo y realice la acción deseada en ciertos intervalos de tiempo.

Por supuesto, también puede usar el control del temporizador con una aplicación de consola.

3

Utilice un Temporizador System.Threading y proporcione un TimerCallback (que contiene su proceso.Kill) para devolver la llamada después de 2 minutos. Ver the example here

//p1.Kill(startingTime.AddMinutes(2)); 
using (var timer = new Timer(delegate { p1.Kill(); }, null, 2000, Timeout.Infinite)) 
{ 
    Console.ReadLine(); // do whatever 
} 

Editar: solución de Jon es más simple .. .. no menos tipos Eliminación reqd.

Cuestiones relacionadas