Mehrfachen Start des Programms verhindern

haimat

Mitglied
Hallo zusammen!

Ich schreibe derzeit an einem Java-Programm, von dem ich möchte, dass nur eine Instanz auf einem Computer gleichzeitig laufen kann. Dazu verwende ich einen Socket, den ich reserviere und öffne. Die zweite Instanz erkennt den geöffneten Socket und beendet sofort wieder. Mir gefällt dieser Ansatz allerdings nicht besonders -- ich möchte lieber keinen Socket öffnen müssen (schon allein um die Meldung der Windows-Firewall beim ersten Start zu vermeiden). Auch möchten manche User das weniger gern, wenn "unerwünschte" Sockets geöffnet werden.

Eine andere Alternative, die ich versucht habe, ist es, die erste Programminstanz ein File exclusive locken zu lassen, die zweite Instanz könnte das dann nicht mehr und beendet sich wieder. Dies hat unter Windows super funktioniert, allerdings leider unter Linux nicht. Wei es scheint, ist es mit den Standard-Konfigurationen einiger Linux-Distributionen möglich, dass mehrere Instanzen den Lock auf ein File erhalten -- oder habe ich da etwas übersehen?

Kennt einer von euch noch eine andere, elegantere Möglichkeit, dieses Problem zu lösen?
Ich bin für jeden hilfreichen Tipp dankbar 🙂

Viele Grüße, Matthias
 
Du kannst beim Start eine Datei anlegen und sie beim Beenden löschen. Ist allerdings doof wenn dein Programm abschmiert und die Datei nicht gelöscht wird.
Nativ kann man da einiges machen. Der Eclipse Launcher kann das zB von Haus aus. Vielleicht kannst du dir da was abschauen oder den Launcher direkt verwenden und Equinox als Basis für deine Anwendung benutzen.
 
Du kannst beim Start eine Datei anlegen und sie beim Beenden löschen. Ist allerdings doof wenn dein Programm abschmiert und die Datei nicht gelöscht wird.

... daran habe ich auch schon gedacht. Allerdings, wie du schreibst, wenn das Programm oder der Rechner abstürzt, dann würde das Programm beim nächsten Mal überhaupt nicht mehr starten, wenn man diese Daten nicht manuell löscht. Leider auch nicht sehr elegant 🙁

Wenn möglich würde ich natürlich gerne auf Bordmittel zurückgreifen, ohne externe Bibliotheken oder sowas...

VG, Matthias
 

Zurück
Oben