Anwendung zweimal starten



  • Hallo
    Wie kann ich verhindern, dass eine Anwendung ein zweites mal startet,
    wenn ich das Icon versehentlich ein zweites mal anklicke?



  • Lege eine temporaere Datei beim ersten Starten. Ueberpruefe beim Start der Anwendung, ob die Datei vorhanden ist. Die erste Instanz sollte beim beenden die temporaere Datei wieder loeschen.



  • Temporäre Datei finde ich nicht so gut.
    Das geht mit etwas WinAPI, wurde hier auch schon mal besprochen:
    http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/snipp/sc06014.php



  • knivil schrieb:

    Lege eine temporaere Datei beim ersten Starten.

    Bloß nicht. Was ist, wenn jemand den Strom ausknipst, während das Programm läuft? Dann wird nach dem Neustart niemand mehr das Programm starten können. Unter UNIX mag es üblich sein, das Problem so anzugehen, aber unter Windows gibt es bessere Lösungen, etwa Mutexes oder Semaphores.

    Edit: Ah, da war jemand schneller 😉



  • Bullshit. Eine Datei kann ich immerhin als normaler Benutzer loeschen, falls das Programm abschmiert und kann als Hinweis beim Programmstart ausgegeben werden. Wie wuerde man denn diesen Mutex aus dem System entfernen, ohne den Rechner neu zu starten? Ist der Mutex an den Prozess gekoppelt?

    aber unter Windows gibt es bessere Lösungen, etwa Mutexes oder Semaphores.

    Ach, ich vergass. Diese Moeglichkeiten gibt es in Linux natuerlich nicht. Deswegen nutzen die meisten Programme z.B. firefox temporaere Dateien.



  • Hallo

    Die Anwendung muß erstmal das Recht haben, eine Datei anzulegen. Und wenn der Prozeß hart abstürzt, dann bleibt die Datei übrig und muß manuell gelöscht werden. Viel Spaß dabei, das einem unbedarftem User zu erklären...

    Semaphores/Mutexe werden von Windows verwaltet, und auch bei Abstürzen beendet.

    bis bald
    akari

    /Edit : knievel hat seinen Post noch geändert, damit ist meiner nicht mehr relevant.



  • knivil schrieb:

    Bullshit. Eine Datei kann ich immerhin als normaler Benutzer loeschen, falls das Programm abschmiert und kann als Hinweis beim Programmstart ausgegeben werden.

    Etwa so?

    "Dieses Programm läuft bereits; die zweite Instanz wird daher beendet. Falls das unbeabsichtigt ist, öffnen Sie doch bitte den Ordner C:\Users\<...>\AppData\Local\Temp und löschen dort die Datei <...>.tmp, sofern vorhanden."

    Läßt du so etwas auf deine Benutzer los?

    knivil schrieb:

    Wie wuerde man denn diesen Mutex aus dem System entfernen, ohne den Rechner neu zu starten? Ist der Mutex an den Prozess gekoppelt?

    Nein, an den Thread. Du kannst es hier nachlesen:
    http://msdn.microsoft.com/en-us/library/ms684266%28v=vs.85%29.aspx

    knivil schrieb:

    aber unter Windows gibt es bessere Lösungen, etwa Mutexes oder Semaphores.

    Ach, ich vergass. Diese Moeglichkeiten gibt es in Linux natuerlich nicht.

    Das weiß ich nicht. Jedenfalls kann ich mich nicht erinnern, das behauptet zu haben 😉

    knivil schrieb:

    Deswegen nutzen die meisten Programme z.B. firefox temporaere Dateien.

    Nur weil andere das auch tun, läßt sich daraus nicht ableiten, daß es eine gute Idee ist. Firefox tut überdies etwas mehr als nur diese eine Datei zu erstellen; andernfalls würde sich das Programm überhaupt nicht wieder starten lassen, wenn ich es gewaltsam terminiert habe (was leider gelegentlich vorkommt). Aber so genau scheinst du dich mit dem Thema ja noch nicht befaßt zu haben. Vielleicht könnte das ja Anlaß geben, mit Pejorativen wie "Bullshit" etwas zögerlicher umzugehen? 😉



  • Danke für die vielen Tips!

    @ W. Posur:
    Ich werde die WinMain()-Funktion modifizieren.
    Scheint mir die optimale Lösung!


Log in to reply