Gerade bin ich in Klaus’ Blog auf einen Post gestoßen, der mich etwas irritiert hat. Im deutschen stackoverflow.com tauchte die Frage auf, wie man eine Anwendung so gestalten kann, dass sie nur einmal gestartet werden darf. Dafür nimmt ja bekanntlich einen Mutex, da dieses Verriegelungsobjekt systemweite Gültigkeit hat und daher zwar nicht explizit für diesen Fall geschaffen wurde, sich aber am besten von allen Verriegelungsobjekten dafür eignet.
Klaus präsentiert jedoch einen Vorschlag, den er persönlich besser findet. Er ermittelt über die statische Methode Process.GetProcesses alle im System vorhandenen Prozesse und sucht dann den Prozess, der den Namen seiner Anwendung trägt. Warum er Mutexe meidet und lieber über alle Prozesse iteriert, sagt er leider nur in einem Kommentar:
Mit Kanonen auf Spatzen ist da noch untertrieben.[..]
Auf Peter Buchers Kommentar, man möge doch einen Mutex verwenden Antwortet Klaus:
Hallo Peter, ich weiß dass viele den Mutex bemühen. Doch gerade die Verwendung eines Mutex, und er muss als System-Mutex registriert werden, verlangt einiges an Disziplin. Der Mutex muss sauber gegen Exceptions abgesichert werden, er muss auf alle Fälle freigegeben werden und der Benutzer muss über die nötigen Rechte verfügen. Um all das zu umgehen, hab ich mir diese einfache "use and forget" Methode überlegt.
Allerdings ist es nicht die Vorgehensweise, einen Mutex zu verwenden (je nach verwendetem Konstruktor), sondern seine eigene, bei der der Benutzer über die nötigen Rechte verfügen muss.
Die Methode Process.GetProcesses erfordert vollen Systemzugriff, also muss die Anwendung in der Sicherheitsgruppe FullTrust ausgeführt werden.
Dass man sich bei Verriegelungsobjekten Gedanken darüber machen muss, wie man sie sauber freigibt, sollte in Zeiten des Multithreadings jedem Programmierer klar sein. Gegen Exceptions kann er über den globalen ExceptionHandler abgesichert werden, den ebenfalls jede Anwendung haben sollte, um Unhandled Exceptions protokollieren zu können. Bei einem sauberen Systemdesign ist der “Mit dem Kopf durch die Wand”-Methode von Klaus nicht unbedingt die einfachere Alternative.
In den letzten Jahren ist das Thema Sicherheit immer mehr in den Fokus gerückt. Microsoft versucht, die Programmierer von Windows-Software dazu zu bewegen, sich endlich an die Implementierungsvorschriften zu halten, damit es möglich werden kann, dass ein Windows-Benutzer nicht grundsätzlich Administrator sein muss, um seinen PC benutzen zu können. In diesen Zeiten kann ich den Hinweis von Klaus daher nicht unkommentiert stehen lassen, vor allem, da er nur einseitig eine Halbwahrheit beschreibt.
Remember Me
a@href@title, strike
Theme based on MadsSimple dasBlog theme by Mads Kristensennewtelligence dasBlog 2.3.9074.18820
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.