C# puefen ob Pozess reagiert

Murphy9904

Lt. Junior Grade
Registriert
Mai 2007
Beiträge
344
Hi,
gibts so ne Funktion mit der ich ueberpruefen kann ob ein Programm noch reageiert..
also so dass ich ueberpruef ob das Programm noch reagiert und wenn nich dann will ichs neustarten.

danke schonmal

LG
Murphy
 
normalerweise sagt dir das windows nach ein paar sekunden,
alternativ strg+alt+entf -> task manager, wenn dort daneben steht (reagiert nicht mehr) kannst du unten auf task beenden klicken
 
ja das is mir schon klar..
ich will da aber nich den ganzen tag davorhocken und das immer neustarten
 
Ermittle doch die Prozess ID des Programms - schau ob es auf Inputs reagiert.
Sollte es nicht nach einer gewissen Zeit antworten..kill..

Manche Programme stellen ein Interface dafür bereit.
 
ok klingt cool wenn ich wuesst wie das geht..
 
Es gibt die "Responding" Eigenschaft bei einem Prozess Objekt.

Kleines Beispiel:

Process[] proc = Process.GetProcessesByName("blubb");
if(proc[0].Responding)
blabla
 
cool genau das suche ich

danke dir hoffe das geht auch so wies soll
Ergänzung ()

Code:
Process[] proc = Process.GetProcessesByName("Server1");
            if (proc[0].Responding)
            {
                MessageBox.Show("reagiert");
            }

hmm also mir springt der da immer rein auch wenn das programm nichmehr reagiert.
Ergänzung ()

ich mach da doch nichts falsch oder?

weis jemand warum das nich geht?
 
Also ich habs schön öfter verwendet und es hat funktioniert. Hab es eben nochmal getestet.
Zwei Programme. Einmal das:
Code:
private void checkifresponding()
        {
            Process[] proc = Process.GetProcessesByName("blubb");
            if (proc[0].Responding)
                MessageBox.Show("Responding!");
            else
                MessageBox.Show("Not Responding!");
        }
Dann hab ich schnell das geschrieben:
Code:
private void button1_Click(object sender, RoutedEventArgs e)
        {
            int i = 0;
            while (true)
            {
                i++;
            }
        }
Was garantiert in "keine rückmeldung" endet. Und es hat bei mir geklappt. Hab ich die Schleife gestartet hat er sofort "Not Responding!" angezeigt und vorher "Responding!". Sicher das der Name der .exe Datei richtig ist und es nicht mehrere Instanzen gibt? Also die proc[0] garantiert der richtige Prozess ist?
 
hmm seltsam
also bei geht es sicher nicht
hier mal ein screenshot:
http://dl.dropbox.com/u/14540512/bla.jpg

vllt is das ja irgendwas andres wenn diese meldung da kommt die einen fragt ob man das programm schliessen will
 
Hmm also wenn du dir ganz sicher bist das der Prozess Server1.exe heißt weiß ich auch nicht weiter :/ Wie gesagt, bei mir funktioniert es, auch mit ner Meldung. Wär komisch wenns genau bei deiner Meldung nicht mehr gehn würde.
 
Handelt es sich um eine stinknormale Anwendung deren Reaktionsvermögen du testen willst oder ist es ein Service?

Das Problem mit Services ist, das die im allgemeinen keine Meldungsschleife wie bei normalen Anwendungen haben. Jedoch ist dies nach meinem Wissen notwendig sodaß Windows erkennen kann, ob eine Anwendung in einer "Schleife" hängt oder ganz normal auf Eingaben reagiert.
 
also der Server stuerzt ab wenn irgendwelche chaeter da ihr unwesen drauf treiben..
oder man eine falsche map laed..
ich weis nich ob der dann in ner schleiffe endet.. weil er stuerzt ja komplett ab im task manager steht halt dass er nichmehr reagiert..


Edit: ja ich bin mir auch sicher dass er "Server1.exe" heisst.
Ergänzung ()

Ich hab jetzt noch tausend andre Funktionen von der Process Klasse Versucht und keins Funktioniert richtig..

das Problem is glaube ich dass das Programm abstuerzt und sich nicht in einer Schleiffe endet (was also nicht "Not Responding" ist)

kennt nicht irgendwer das Problem?

bei mir heists ja "has stopped working"
und nicht "not responding"

waere sehr dankbar

LG
Murphy
 
Zuletzt bearbeitet:
Murphy9904 schrieb:
bei mir heists ja "has stopped working"

Verschwindet dann der Prozess nicht einfach aus der Liste?

Ansonsten ist dann ja der Prozess dieser Meldung offen. Da ist in dem Fensterrand in dieser Nachricht auch der Name des betroffenen Prozesses. Das wäre die umständliche, aber wirklich letzte Lösung, falls alles andere nicht funktionieren sollte.
 
Oder versuchs andersrum: Bekommst du denn immer die selbe Antwort, solange alles in Ordnung ist und der Prozess läuft?
Dann könntest du einen Timer starten, der deinem Server Zeit gibt diese "ok" zu senden - und wenns nicht kommt bzw nichts kommt wird er halt gekillt und neu gestartet
 
nee windoof fragt mich dann noch ob ich es schlissen oder schliessen und sinnloses zeug dazu lesen will. - und dann erst verschwindet der Prozess

ich hab ja weiter oben nen screenshot gepostet
http://dl.dropbox.com/u/14540512/bla.jpg

und in dem Melundsfenster steht auch ncihts

das mit dem OK vom server.. der is nich von mir da kann ich das auch schlecht reinprogrammieren wenn du das damit gemeint hast
 
ja schon,
aber so ganz versteh ich nich was das mir bringt..
am ende solls 5. von diesen servern geben die ich mit meinem Programm ueberwachen lasse und die heissen dann alle "Crysis wars".
Absturzprotokollprozess? --> das WerFault.exe? (das ding was hinter dem Fehlerfenster steckt)? da seh ich keinen Pfad oder so dabei.. :(
 
Hmm...
Andere Möglichkeit wäre nach dem Absturzkontrollprozess zu suchen, bis er gefunden wurde. Dann das Logfile davon aufrufen und nach dem Pfad parsen.
 
das is dann aber sehr "unsauber" dann kann ich ja gleich irgendwie versuchen die position des fensters zu veraendern und gucken obs geklappt hat.

im Tastkmanager steht ja "not responding" wieso kann ich das nich einfach "programmatisch" lesen?

(bin dann ma weg fuer heut)
Ergänzung ()

was ich irgendwie uebersehn hab:
der server hat ne Logfile in der man auslesenkann ob der server gecrashd is und so

aber danke fuer all eure Bemuehungen

LG Murphy
 
wird es überhaupt geprüft und wann es geprüft wird, ob dein Prozess läuft! Geh ma mit dem debugger rein! vielleicht bringt es was!
 
Zurück
Oben