Anwendungsstart nur einmal zulassen, aber wie?
-
Hi ihr.
Der Titel mag villeicht etwas konfus klingen, aber ich erklärs mal kurz.
Ich habe eine kleine Anwendung geschrieben. Diese darf jedoch nur 1 mal aktiv laufen, also auch demnach im Taskmanager nur 1 mal erscheinen.
Ich hab es bisher so gelöst, das die Anwendung eine Datei erstellt und am Ende wieder löscht. Dies war nach folgendem Schema:Programmstart:
Prüfe ob Datei name.ext besteht
- Wenn ja:
- - Beende Programm (natürlich ohne die Datei zu löschen)
- Wenn nein:
- - Programm führt weitere Schritte aus (den normalen Programmablauf)
Programmende:
Lösche Datei name.extMan sieht also hier, dsa anhang einer Dateiüberprüfung festgestellt wird, ob ein Programm bereits läuft. Aber die Sache hat einen gigantischen Nachteil:
Wenn das Programm oder der PC abstürzt, wird dann auch nicht mehr die Datei gelöscht. Das hätte zu Folge, das ein normaler Anwender das Programm nicht mehr starten könnte, da sich die Prüfungsdatei verewigt hat.
Wer von euch hat eine Idee, wie man ein Programm starten kann, was nur einmal am PC laufen darf?
PS: Ich hoffe, das ich unter WinAPI da richtig liege.
-
-
Als Name bietet es sich an eine GUID zu benutzen. Die kannst du z.B. mit GuidGen.exe generieren, welches beim PSDK dabei ist.
MfG,
:schland: *Ranner* :schland:
-
Ok, dank dir schonmal für die schnelle Hilfe. Das ist genau das, was ich gesucht habe. Eine (bestimmt) dumme Frage hab ich aber.
Ich zitiere mal folgendes:HANDLE hMutex; hMutex = CreateMutex(NULL, TRUE, "MutextName"); if(GetLastError() == ERROR_ALREADY_EXISTS) { PostQuitMessage(0);//Mutex gibts schon,Programm beenden } //weiter im ProgrammIst die Angabe "MutextName" der direkte Name, wie man ihn auch in der Taskleiste (Caption) verwendet, oder kann man auch den Dateinamen der .exe nehmen? Das Problem bei meiner Anwendung ist, das sich der Caption-Text öfters mal verändert (z.B.erscheint bei Updates der Zusatz "Bitte warten... Aktualisiere"). Gibt es in diesem Fall evtl. eine Möglichkeit, z.B. durch den Dateinamen (wie auch unter Taskmanager->Prozesse->Name) die Anwendung zu blocken? Das hört sich evtl. etwas kompliziert an, aber ich hoffe doch, das es Möglichkeiten gäbe, nicht anhand der Caption eine Anwendung zu erkennen.
-
Den Namen dort kannst du frei wählen. Dies ist nur der Name des Mutex und beeinflusst deine Applikationsnamen überhaupt nicht. Wenn du das Programm das zweite mal startest, wird versucht nochmals ein Mutex mit dem gleichen Namen anzulegen, was dann zu dem Fehler ERROR_ALREADY_EXISTS führt.
Wie gesagt, die Namenswahl kannst du hier beliebig treffen.
-
http://www.flounder.com/nomultiples.htm :schland:
-
Ah super. Ich versteh das jetzt mal so, als wenn der Mutex-Name ne Art ID-Nummer ist. Dann wär ja alles in Butter

-
kenny197902 schrieb:
Ah super. Ich versteh das jetzt mal so, als wenn der Mutex-Name ne Art ID-Nummer ist. Dann wär ja alles in Butter

Du hast es richtig verstanden. Der Mutex-Name ist ne Art ID-Nummer (ID-Name).
