Verhindern, dass eine zweite Instanz geöffnet wird

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

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?

Ist hier beschrieben:
http://www.flounder.com/nomultiples.htm
(http://www.ddj.com/windows/184416849)

Grüße

CMБ

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]

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

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 :smile: ) 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