2011-01-02 3 views
2

ausgeführt wird Ich mache eine Anwendung, die den Status eines anderen Prozesses überwacht und neu startet, wenn sie nicht mehr reagiert, beendet wird oder einen Fehler auslöst. Ich habe jedoch Probleme, es zuverlässig überprüfen zu lassen, ob der Prozess (in einem C++ - Konsolenfenster) nicht mehr reagiert.Überprüfen, ob eine Konsolenanwendung noch mit der Prozessklasse

Mein Code sieht wie folgt aus:

 public void monitorserver() 
    { 
     while (true) 
     { 
      server.StartInfo = new ProcessStartInfo(textbox_srcdsexe.Text, startstring); 
      server.Start(); 
      log("server started"); 
      log("Monitor started."); 
      while (server.Responding) 
      { 
       if (server.HasExited) 
       { 
        log("server exitted, Restarting."); 
        break; 
       } 
       log("server is running: " + server.Responding.ToString()); 
       Thread.Sleep(1000); 
      } 
      log("Server stopped responding, terminating.."); 
      try 
      { server.Kill(); } 
      catch (Exception) { } 
     } 
    } 

Die Anwendung Ich bin Überwachung Valves Source Dedicated Server ist, Garry Mod läuft, und ich bin über die Physik-Engine betont zu simulieren Anhalten reagiert. Dies löst jedoch niemals die Prozessklasse aus, die es als "nicht mehr reagiert" erkennt.

Ich weiß, es gibt Möglichkeiten, den Quellserver direkt mit ihrem eigenen Protokoll abzufragen, aber ich möchte es einfach und universell halten (damit ich es vielleicht für andere Anwendungen in der Zukunft verwenden kann).

Jede Hilfe willkommen

+0

+1 für SLaks, die beste, die Sie verwalten können, ist "läuft es, oder hat es aufgehört?". Ich würde die proprietäre API verwenden, um den Status zu überprüfen. –

Antwort

3

Die Responding property zeigt an, ob der Prozess eine Windows-Nachrichtenschleife ausgeführt wird, die nicht aufgehängt ist.
Da die documentation Staaten,

Wenn der Prozess diese Eigenschaft nicht über eine Mainwindowhandle haben, gibt true zurück.

Es ist nicht möglich zu überprüfen, ob ein beliebiger Prozess eine beliebige Sache ausführt, wie Sie es versuchen.

+0

Danke! Wusste das nicht und konnte es bei Google nicht finden ^^; muss nächstes mal besser aussehen. Gibt es eine andere Möglichkeit, nach einer Konsolenanwendung zu suchen, wenn sie hängt? Danke für die Hilfe =) – Alex

+0

@Ced: Es gibt keine Vorstellung von einer Konsole Prozess hängt. Ein Konsolenprozess macht immer etwas; Es kann Dinge tun, die es erlauben, auf Anfragen zu antworten. – SLaks

+0

@Ced: Überhaupt nicht. Es gibt keine Möglichkeit, eine Schleife zu spezifizieren, geschweige denn die richtige zu finden oder zu überprüfen, ob es sich um eine Schleife handelt. – SLaks

Verwandte Themen