C# Prozess automatisch beenden

Daran habe ich auch schon gedacht, ich müsste nur die ganzen java.exe voneinander unterscheiden.

WorkingDirectory vielleicht?
 
ODer du legst eine Log-Datei an in der drin steht, welche Prozess-ID wozu gehört.
Trotzdem solltest du weiterhin versuchen, dass dein Dienst gar nicht erst abstürzt.
 
Die PIDs speicher ich, aber wenn zu viel Zeit zwischen den Starts vergeht kann die PID wieder einem anderem Prozess gehören.

Dass ich mein Programm so schreiben sollte, dass er nicht abstürzt ist schon klar. Aber wer kann dafür garantieren? Es passiert immer irgendwas unvorhergesehenes, oder was man nicht berücksichtigt hat.
Und für diesen Fall möchte ich quasi das von mir gewünschte Verhalten erzwingen.

Das Größte Problem ist, dass der Dienst unbeaufsichtigt auf Servern läuft. Und wie erzähle ich denen, die das Programm nutzen, welche Java.exe zu mir gehört und welche nicht? Um mir Arbeit zu sparen möchte ich das möglichst Dau-Sicher machen.
 
Es ist ja so, dass man die JRE aufruft und ihr die auszuführenden Klassen übergibt. Falls man eine Java Anwendung im Browser öffnet wird hierzu die java.exe aufgerufen.
Komme ich mit meiner Anwendung daher wird auch ne java.exe aufgerufen. Öffnet man ein anderes Java Programm gibt es wieder eine java.exe.
 
Ich habe gerade meinen Dienst umgeschrieben, sodass die OnStop Methode nicht aufgerufen wird, sondern direkt ein Objekt von meiner ThreadKlasse instanziert wird (so ist es eine einfache Konsolenanwendung).

Wenn ich nun den Prozess abschieße verschwinden alle Kindsprozesse.

Jetzt bin ich verwirrt. Liegts an der Dienstverwaltung?
 
Wenn es ein Hauptfenster gibt könntest du dir dessen Handle noch zusätzlich zur PID merken um zu vergleichen obs noch der gleiche Prozess ist.

Problem bei der MainWindowHandler Eigenschaft des Process Objektes ist nur, wenn du es zu früh abfragst bekommst du 0 zurück und intern hält es sich in den Wert das Handle nicht erneut abzufragen (Refresh aufruf zum verwerfen der Info).

Da ich kein VisualStudio hier hab und keine Java Anwendungen, kann ich nur vermuten.
Aber ich würde mit die Eigenschat MainModul, mit den Eingeschaften ModulName und BaseAdress noch anschauen.

Edit: Seh grad, anscheinend hat sich das problem wohl von selbst gelöst.
Wäre wirklich interessant warum das so ist, ev. steuert das ja auch Java selbst?
 
@Spike: Danke für deine Antwort. Also das Problem tritt nur auf, wenn mein Programm von der Dienstverwaltung aufgerufen wird. Deswegen vermute ich, dass es irgendwo Einstellungssache ist, wie mit Child-Processes umgegangen wird.

Aber ich finde es nirgends. Ein Workaround von mir ist im Moment, dass ich mir beim starten die Prozessliste hole und die Eigenschaften (Workingdirectory usw.) prüfe, ob die mit denen übereinstimmen, die ich starten möchte.
 
Zurück