.NET
Windows 7 und seine Schönheitsfehler Teil 1: Ordnerpfade
Posted on .Seit einiger Zeit ist nun Microsofts neues Betriebssystem Windows 7 auf dem Markt und schlägt sich bisher sehr gut! Ich nutze es selber jeden Tag und bin begeistert von der Geschwindigkeit und den neuen Features die es bietet. Doch leider gibt es auch hier ein paar (wenn auch wenige) Schattenseiten, über die ich in dieser Reihe berichten möchte!
In diesem Ersten Teil geht es um ein kleines „Feature“, dass einem nicht gleich ins Auge springt und teilweise auch schon in Windows Vista vorzufinden war. Der „normale“ Nutzer würde es wahrscheinlich garnicht bemerken, doch wir als Programmierer müssen desöfteren mit konkreten Pfaden arbeiten, und das ist genau die Sache!
Blicken wir kurz zurück auf Windows XP und seine NT-Vorgänger. Jede Windows XP Version, egal in welcher Sprache sie vorliegt hat den selben Aufbau, zB. wird man immer den Ordner C:\Programme vorfinden, in dem die ganzen installierten Programme liegen.
Wenn wir nun also diesen Pfad fest in unser Programm einbauen, da wir ja davon ausgehen, dass dieser Pfad konstant ist müsste es ja „immer“ laufen! Doch das ist leider nicht so, denn wenn man unser Programm auf einem Rechner mit einer Englischen Kopie von Windows (XP) startet, wird das Programm abstürzen, da es den Ordner C:\Programme nicht finden wird!
Warum? Ganz einfach, denn im Englischen gibts das Wort „Programme“ nicht! Dort heißt der Ordner „Program Files“ und müsste dementsprehend über „C:\Program Files“ angesprochen werden! – Ja, ich weiß, ein normaler Mensch würde hier die Umgebungsvariable „ProgramFiles“ nutzen, die immer auf den richtigen Ordnerpfad zeigt, aber das würde das Problem nicht verdeutlichen! (dazu kommen wir noch)
Also zurück zu Windows 7. Microsoft dachte sich auch, dass das wohl blöd ist und entschied sich dazu alles einheitlich zu machen! – Gute Idee, doch etwas komisch umgesetzt!
Schauen wir uns doch mal einen Typischen Windows 7 Ordnerpfad an:
Bild 1: Der Ordner „Eigene Bilder“ ausgewählt im WIndows Explorer
Wenn ich Sie nun nach dem Pfad zu dem ausgewählten Ordner frage, würden Sie wohl wie folgt antworten:
C:\Benutzer\Basti\Eigene Bilder
Ich kann Sie beruhigen, diese Angabe ist völlig korrekt, so scheint es. Denn an dieser Stelle täuscht uns Windows 7 bzw. der Windows Explorer.
Denn würden Sie den o.g. Pfad aufrufen wollen, würde Windows eine Fehlermeldung ausgeben, die besagen würde, dass der Ordner nicht existiert! – Wie kann das sein?
Das liegt daran, dass Windows uns die deutsche Sprache nur vortäuscht! Denn der echte Pfad sieht so aus:
Bild 2: Der wahre Pfad steht oben
Nach einem Klick in die Adresszeile wird man feststellen, dass der Ordnerpfad komplett nur aus Englischen Wörtern besteht!
Das macht es manchmal umständlich eine Datei zu finden, auch wenn es für den eigentlichen Nutzer angenehmer erscheint!
Wie kann man sich schützen?
ALs Programmierer sollte man seinen Code immer so schreiben, dass es auf allen Windows Versionen lauffähig ist, doch wie macht man das wenn die Ordner immer anders heißen?
Die Antwort ist relativ leicht und lautet „Umgebungsvariable“! Denn Windows übersetzt nicht alle Ordner, sondern nur die so genannten „Special Folders“. Das sind Ordner, die für das System von Bedeutung sind!
Dazu gehören der Windows Ordner Selbst, der Systemordner, der Programmordner oder der „Eigene Dateien“ Ordner. Aber woher weis ich, ob ein Ordner ein „Special Folder“ ist oder nicht?
Das kann man ganz einfach herausfinden, indem man in die Liste der Umgebungsvariablen (Environmentvariables in English) schaut. Diese findet ihr zb so: [Start]+[R] Tippt nun „cmd“ ein und drückt auf [ENTER] um in die Eingabeaufforderung von Windows zu gelangen. Nun tippt „set“ ein und drückt erneut auf [ENTER].
Bild 3: Die Liste mit den Umgebungsvariablen unter Windows
Hier sehr ihr eine komplette Liste mit allen dem Benutzer zugänglichen Umgebungsvariablen. Alternativ könnt ihr auch so vorgehen: [Start] und nun tippt ihr in das Suchfeld von Windows Vista oder 7 „erweitert“ ein und lasst Windows ein paar Sekunden suchen, dann klickt ihr auf den Eintrag „Erweiterte Systemeinstellungen Anzeigen“, wählt nun oben den Tab „Erweitert“ auf und klickt unten auf „Umgebungsvariablen“ ihr bekommt folgendes zu sehen:
Bild 4: Die Grafische Oberfläche der Umgebungsvariablen
Unter Windows XP Erreicht ihr dieses Fenster mit einem Rechtsklick auf Arbeitsplatz und dann Erweitert!
Auf diese Variablen kann man auch sehr bequem vom Code aus zugreifen, und da diese auf jedem System stimmen hat man keine Probleme zu erwarten!
' ' 'Pfad zum Programmordner Dim ProgrammPfad As String ProgrammPfad = Environment.GetEnvironmentVariable("ProgramFiles")Wie man sieht kann man so sehr einfach den Programmordner auslesen.
Windows 7 bietet noch weitere kleine Überraschungen über die ich im Nächsten Teil schreiben werde!
Hat euch diese Beitrag gefallen? Schreibt mir einen Kommentar!
Sebastian Gross
http://www.bigbasti.comSebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.
Author Inga Pachter
Posted at 18:27 23. November 2009.
Hallo,
ich fand den Artikel sehr hilfreich und übersichtlich.
Author Heike Grüneklee
Posted at 13:41 16. August 2010.
Prima Artikel. Danke.