Verhindern, dass eine zweite Instanz geöffnet wird

Von: , Frage gestellt am Di, 24. Jun 2008

Hallo,

wie kann ich in einem Windows-Programm, geschrieben in C mit der Win-32 API, verhindern, dass eine zweite Instanz des Programms aufgemacht wird?

Gruß
Ben

4 Antworten zu dieser Frage

    • Antwort von nach 15 Stunden 0 hilfreich
      Re^2: Verhindern, dass eine zweite Instanz geöffne

      Hallo Semjon,

      Vielen Dank für die rasche Hilfe. Das muss ich mir erst mal angucken, weil ich in C++ nicht besonders sattelfest bin.

      Gruß
      Ben [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

    • Antwort von nach 23 Tagen 0 hilfreich
      Re^2: Verhindern, dass eine zweite Instanz geöffne

      Hallo,
      Hi, wie kann ich in einem Windows-Programm, geschrieben in C mit
      der Win-32 API, verhindern, dass eine zweite Instanz des
      Programms aufgemacht wird?
      Ich hab vor einiger Zeit gelesen, dass man da einfach ein lock-Datei erstellen kann, die man dann beim Programmaufruf mit stat überprüft.

      mfg, Hans

      • Antwort von nach 24 Tagen 0 hilfreich
        Re^3: Verhindern, dass eine zweite Instanz geöffne

        Hallo Hans !

        Das hat aber wieder seine eigenen Tücken:
        Was wenn das Programm aus irgendwelchen Gründen (Pogramm-, Systemabsturz, ...) nicht mehr dazu kommt, die Lockdatei wieder zu entfernen ?
        Unter Linux könnte man das lösen indem man sofort nach dem Öffnen ein 'unlink()' aufruft ohne die Datei zu schliessen, die Datei wird erst dann gelöscht wenn es in keinem Prozess mehr geöffnet ist, also erst nach dem Beenden (oder Absturz :-) ) des Programmes. Nur ist man dann halt auf betriebssystemspezifisches Verhalten beschränkt.
        Ich habe ein ähnliches Problem so gelöst:
        Beim Start wird eine Lockdatei angelegt und dort die ProzessID reingeschrieben. Wenn das Programm beim Prozessstart diese Lockdatei bereits vorfindet wird nachgesehen, ob der Prozess mit dieser ID tatsächlich noch existiert (und nicht zufällig mit der jetzigen eigenen ProzessID übereinstimmt), wenn nicht war das Lockfile ungültig.

        mfg
        Christof

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!