C# Prozess automatisch beenden

deadline

Erfahrenes Mitglied
Hallo,
mein Problem ist folgendes: Ich habe einen Windows Dienst, der über die Process Klasse verschiedene Konsolenprogramme startet. UseShellExecute ist aus (um die Ausgaben abzufangen).

Wenn jetzt mein Programm unvorhergesehen abstürzt passiert folgendes:
Mein Dienst ist beendet, die einzelnen Gast-Prozesse werden netterweise vom System übenommen und weitergeführt. Genau das führt aber zu Problemen, wenn der Dienst neugestartet wird. Dann sind noch die alten Programme da und die neuen kommen dazu.

Kann man irgendwo einstellen, dass beim Beenden des Vater-Prozesses die Kinds-Prozesse mit geschlossen werden?

Schonmal Danke im voraus.

Grüße
Christian
 
Hallo,
erstmal Danke für deine Antwort.
Dieser Mechanismus ist bereits in meinem Programm implementiert. Mein Problem ist folgendes (vielleicht kam es nicht richtig rüber):
Mein Dienst startet Kinds-Prozesse. Wenn jetzt, aus welchen Gründen auch immer der Dienst abstürzt (z. B. Prozess beenden im Taskmanager, unvorhergesehene Situationen usw.) muss er die Kinds-Prozesse mit in den Abgrund reißen.

Beispiel an der Windows Konsole:
Du startest über ein Batch-File ein Java Programm. Wenn man jetzt das Konsolenfenster schließt oder abschießt wird die zugehörige java.exe mit abgeschossen. Dieses Verhalten wünsch ich mir.

Grüße
Christian
 
Hi

Das ist aber genau anders rum, wie du oben geschrieben hast :confused:

Hast du probiert die OnStop-Methode zu überschreiben und das Thema da zu behandeln?
Ggf. auch im Dispose-Event
 
Ich bin der Meinung, dass meine beiden Posts das selbe aussagen.

Wird denn das Dispose Event auch ausgelöst, wenn der Prozess hart beendet wird oder aus diversen Gründen abstürzt?

Am liebsten wäre es mir, wenn es eine Einstellung gibt, mit der ich das gewünschte Verhalten erzwingen kann. Mit anderen Programmen gehts doch auch.
 
Andere Idee, wie wäre es wenn deine Programme in bestimmten Abständen prüfen ob der Dienst läuft (und/oder noch mit der gleichen Id läuft)?

Wie es mit dem event aussieht weiß ich nicht aber wenn du ein eigenes IDisposable- Objekt erstellst und in einem using BLock verwendest sollte die Dispose Methode schon greifen.
Aber das kann man ja auch schnell testen.
 
Diese Funktion ist auch schon implementiert. Aber mir ist was anderes eingefallen: Ich speicher mir die PIDs in meiner Ini Datei und beim nächsten Starten prüfe ich, ob sie noch laufen.
Wobei, wenn dann die PID anderweitig vergeben wurde.

Wie kann ich denn meine Prozesse identifizieren? Da es meistens Java Programme sind steht im Taskmanager nur "java.exe" und davon kann es ja durchaus mehrere geben.
 
Wenn ich dich richtig verstanden habe sind es alles deine Programme?
Dann übergib einfach die PID mit beim start des Programmes und halt se im jeweiligem Programm direkt, ohne Datei.
 
Wenn alles meine Programme wären, würden sie nicht in Java geschrieben sein :p

Wenn mein Programm abstürzt wird auch die PID aus dem RAM gelöscht.
 
Du solltest dein Programm dahingehend ändern, dass es einfach nicht mehr abstürzt. Das erscheint mir die beste Lösung.
 

Neue Beiträge

Zurück