2009-06-22 24 views
8

Wie beende ich einen Prozess nach sagen 2 oder 3 Minuten Blick auf den folgenden Code:Kill Process nach einer bestimmten Zeit + 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); 
     } 



    } 
} 

so möchte ich, dass der IE-Fenster nach 2 Minuten

+1

p1.WaitForExit (60000); // DateTime endTime2; p1.SchließenMainWindow(); // endTime2 = p1.ExitTime; p1.Close(); – Developer

Antwort

21

Verwendung geschlossen Process.WaitForExit mit einer Zeitüberschreitung von zwei Minuten, und rufen Sie dann Process.Kill, wenn WaitForExit zurückgegeben false.

(Das könnte dir auch CloseMainWindow statt Kill, je nach Ihrer Situation zu prüfen, rufen -. Oder zumindest es versucht zunächst, den Prozess eher eine Chance zu geben, ein ordnungsgemäßes Abschalten zu tun)

+0

Danke für die Hilfe John verwendet closemain Windows-Methode, die perfekt funktioniert – Developer

0

Sie sollten versuchen, mit Windows Service statt einer Konsolenanwendung. Windows-Dienste haben einen iterativen Lebenszyklus, so dass dies leicht mithilfe einer Zeitsteuerung im Windows-Dienst erreicht werden kann. Lassen Sie den Timer in einem Intervall ankreuzen und die gewünschte Aktion in bestimmten Zeitintervallen ausführen.

Natürlich können Sie die Timersteuerung auch mit einer Konsolenanwendung verwenden.

3

Verwenden Sie einen System.Threading.Timer und geben Sie einen TimerCallback (der Ihren process.Kill enthält), der nach 2 Minuten zurückgerufen wird. Siehe the example here

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

Edit: Jon-Lösung einfacher ist .. weniger Arten .. keine Entsorgung reqd.

Verwandte Themen