.Net Programm im Netzwerk darf nur in einer Instanz laufen



  • Hallo Leute,

    ich habe eine .Net Anwendung die im Netzwerk liegt und Dateien bearbeitet.
    Aus diesem Grund darf nur eine einzige Instanz der Anwendung laufen, da sich sonst die unterschiedlichen User überschreiben können.

    Habe nun daran gedacht eine Datei zu erstellen, wenn eine Instanz läuft, und ein Programm darf eben nur dann gestartet werden, wenn die Datei nicht vorhanden ist!

    Aber diese Lösung finde ich nicht sonderlich schön. Gibt es da eine andere Möglichkeit das im Programm selbst zu prüfen?

    Viele Grüße



  • Du mußt ein bischen genauer werden. Eine einfache Methode wäre es beispielsweise, die Datei exklusiv zu öffnen.



  • Nun du könntest die Prozesse nach deiner Applikation durchsuchen...

    Ansonsten gibt es auch eine sogenante "Single Klasse" von der es immer nur eine Instanz geben kann.

    Kenne mich damit aber auch nicht so gut aus, googlen/msdn'n. 🙂



  • Das Problem ist, glaube ich, dass es keine zwei Instanzen im Netzwerk geben darf. Daher tuns die üblichen Verdächtigen (wie Mutex, Prozesse abklappern) nicht. Das Singleton-Pattern wird üblicherweise Prozessintern verwendet, nicht übergreifend.

    @GaDgeT:
    Was findest du denn an der Idee, eine Datei exklusiv zu öffnen, schlecht?



  • richtig, es darf keine zwei Instanzen im Netzwerk geben, deswegen scheiden die anderen Möglichkeiten aus.

    Finde die Lösung mit der Datei nicht sonderlich schön, insb. dann wenn z.B. das Programm mal abstürzen sollte. Wer entfernt dann die Datei?

    Eine interne Lösung wäre mir einfach lieber gewesen.
    Evtl. fällt ja jemandem noch was ein.

    Viele Grüße



  • GaDgeT schrieb:

    ... insb. dann wenn z.B. das Programm mal abstürzen sollte. Wer entfernt dann die Datei?

    Da das Betriebssystem alle vom Prozeß angeforderten Betriebsmittel aufräumen sollte (Du verwendest doch kein Win95 / Win3.11 mehr oder?) sollte die exklusive Sperre dann ebenfalls entfernt worden sein. Wenn Du die Datei öffnen oder anlegen kannst gibt es kein solchen Prozeß, der an der Datei noch festhält. Du kannst auch andere Lösungen suchen, wirst aber wahrscheinlich um einen solchen Konstrukt nicht herumkommen.



  • lass dein programm doch als server agieren und wenn eine neue instanz gestartet wird fragt die einmal drchs netz, ob irgendwo schon eine läuft. wenn dein programm dann halt solch eine anfrage erhält sagt es ja und die andere instanz bricht mit fehlermeldung ab.


Anmelden zum Antworten