Environment vs. Assembly

Unter "normalen" Umständen sollte der Aufruf von

Environment.CurrentDirectory

und

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)

so ziemlich dasselbe zurückliefern: Nämlich das Verzeichnis, in dem das (ausführende) Programm liegt. Leider hat Environment.CurrentDirectory den Vorteil, dass es so schön kurz ist und vermutlich immer die erste Wahl sein wird, wenn man zum Beispiel Logdateien für sein Progrämmchen ablegen will.

Der entscheidende "Nachteil" bzw. Knackpunkt bei der Sache ist aber, dass es sich hierbei nur um das aktuelle "Arbeitsverzeichnis" handelt. Lasse ich ein Programm zum Beispiel per geplanten Task ausführen, wäre dieses Verzeichnis nicht das, in dem das Programm selber liegt, sondern Windowssystem32. Workaround dafür: Man gibt explizit bei "Starte In" dieses Verzeichnis an. Oder aber man verwendet strikt immer

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)

Mit den dementsprechenden Verweisen auf System.IO und System.Reflection zu verwenden ;)