Wie das Beenden eines Javaprogrammes verhindern?

  • Themenstarter Themenstarter Gordon1975
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gordon1975

Gast
Guten Tag,

ich möchte verhindern, dass ein Benutzer meine Software beendet bzw. wenn er es tut, dass der PC gesperrt oder heruntergefahren wird.
Ich hatte gehofft mit
Runtime.getRuntime().addShutdownHook(new Thread);
beim Beenden benachrichtig zu werden so dass ich entsprechend reagieren könnte (pc herunterfahren). Leider funktioniert dieses Vorgehen nicht, wenn meine Software über den Taskmanager beendet bzw. die JVM "abgeschossen" wird.

Habt ihr noch andere Ideen? Vielleicht ein zweites Programm schreiben, dass permanent prüft ob die eigentliche Software noch aktiv ist?

Gruß
Gordon
 
Das Abschießen über den Taskmanager kannst du nicht verhindern, es sei denn die User haben nur Userrechte und das Programm läuft bei Systemastart als Service über Administrator hoch.

Wäre ja noch schöner wenn Programme einfach sagen könnten "Ich will aber nicht dass der User oder das OS mir Befehle erteilt!"...
 
Gordon1975 hat gesagt.:
Habt ihr noch andere Ideen? Vielleicht ein zweites Programm schreiben, dass permanent prüft ob die eigentliche Software noch aktiv ist?

Und wie reagierst Du, wenn erst dein "zweites Programm" und dann dein "erstes Programm" abgeschossen wird?? Dann brauchst Du entweder noch ein "drittes Programm" oder dein "erstes Programm" muss auch permanent gucken, ob dein "zweites Programm" noch da ist...

Sag doch vielleicht mal was Du genau vor hast (und vor allem warum)... vielleicht fällt uns ja noch etwas dazu ein...
 
Gordon1975 hat gesagt.:
Habt ihr noch andere Ideen? Vielleicht ein zweites Programm schreiben, dass permanent prüft ob die eigentliche Software noch aktiv ist?
Ich hab's noch nie probiert, aber mit einem SecurityManager könntest du schonmal innerhalb der Applikation verhindern, dass diese beended wird. Damit hättest du allerdings immer noch nicht den direkten "Abschuss" über die Taskleiste verhindert.
 
sky80 hat gesagt.:
Und wie reagierst Du, wenn erst dein "zweites Programm" und dann dein "erstes Programm" abgeschossen wird?? Dann brauchst Du entweder noch ein "drittes Programm" oder dein "erstes Programm" muss auch permanent gucken, ob dein "zweites Programm" noch da ist...
genau, so hatte ich mir das gedacht. das hauptprogramm würde dann den "wächter" überwachen.

sky80 hat gesagt.:
Sag doch vielleicht mal was Du genau vor hast (und vor allem warum)... vielleicht fällt uns ja noch etwas dazu ein...
Vereinfacht geht es um folgendes: Ich habe eine Software die im Hintergrund läuft und schaut ob sich der Benutzer am PC befindet (Identifizierung findet über die Bluetoothschnittstelle eines Mobiltelefons statt aber das spielt keine rolle). Ist der Benutzer weg, soll der PC gesperrt werden. Ich möchte jetzt verhindern, dass ein Unbefugter meine Software beendet, bevor die Software gemerkt hat, dass der eigentliche Benutzer weg ist.

Das Hauptproblem besteht darin, das Beenden über den Taskmanager zu verhindern. Das "normale" Programmende könnte ich einfach mit einer Passworteingabe versehen oder so.

Könnt ihr mir sagen, wie ich mit Java überwachen kann ob ein bestimmes anderes Javaprogramm noch läuft? Kann ich irgendwie auf die aktive Prozessliste zugreifen? Oder die zwei Programme über Input/Output-Streams kommunizieren lassen? Das bräuchte ich eigentlich sowieso, weil auch nur eine Instanz der Software laufen soll, sprich sie soll nicht mehrfach gestartet werden können vom Benutzer.

btw. die Software soll in erster Linie unter Windows laufen, die Lösung muss also nicht unbedingt Plattformanabhängig sein aber nach Möglichkeit mit Java 1.4 funktionieren.

Gruß
Gordon
 
Also, wenn Du rein mit Java auf die Prozessliste zugreifen könntest, würde mich das sehr stark wundern! Dafür brauchste wohl JNI. Aber dann kannste dein Tool selbst in C++ schreiben...

Ja, Du kannst die Programme mehrfach laufen lassen und normalerweise ist es auch kein Problem, diese miteinander 'reden' zu lassen.
 
besorg dir .NET

und schreib einen hauchdünnen Wrapper in C# o.ä, der dein Java-Programm als Dienst beim Hochfahren startet. Ist nämlich in .NET fast albern einfach, Systemdienste zu schreiben.

das ist es wohl eigentlich, was du willst??
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben