2010-11-24 3 views
0

Ich versuche, ein Problem mit Cabal zu debuggen, wo es nicht funktioniert, wenn ich den Wert der Umgebungsvariablen% USERPROFILE% vor der Ausführung ändere. Ich habe den Fehler zurück zu dem Win32-Aufruf sHGetFolderPath, der auf SIDL_APPDATA verweist, zurückverfolgt, der fehlschlägt, wenn diese Variable geändert wird.Warum führt das Ändern von% USERPROFILE% dazu, dass sHGetFolderPath SIDL_APPDATA fehlschlägt?

Ich bin nicht wirklich sicher, wohin ich von hier aus gehen soll. Warum bricht dieser Anruf? Warum ändert das Ändern von env-var nicht einfach das Benutzerverzeichnis an anderer Stelle? (Ich versuche Cabal sauber von einem Flash-Laufwerk zu arbeiten.)

Zum gleichen Thema, Aufrufe an die gleiche Funktion mit SIDL_PROFILE gibt meine tatsächlichen (angemeldet) Benutzerverzeichnis (C:/Docs und Einstellungen/Ich), obwohl die Konsole, auf der GHCi läuft, jede env-var hatte, die ich mit einem Benutzerverzeichnis darin finden konnte, wurde auf das Flash-Laufwerk zurückgesetzt. Unterbinden diese Win32-Aufrufe die Umgebungsvariablen vollständig?

+0

Als eine Anmerkung, ich fand die beleidigende Methode Anruf über dieses Ticket für Cabal: http://hackage.haskell.org/trac/hackage/ticket/709 Was unter SHGetFolderPath los ist kann dieses Problem helfen. – CodexArcanum

Antwort

1

Win32-Funktionen verwendet keine Umgebungsvariablen dafür, dass Informationen an anderen Orten gespeichert werden. Der genaue Speicherort ist nicht wichtig, da Microsoft diese Implementierungsdetails berücksichtigt, sodass es von Version zu Version wechseln kann (The long and sad story of the Shell Folders key).

%USERPROFILE% und ähnliche Umgebungsvariablen werden vom Befehlszeilenprozessor zum Schreiben von Stapeldateien bereitgestellt, sodass Sie diese Positionen direkt aus einem Skript abrufen können. Das Ändern der Umgebungsvariablen wirkt sich nur auf Skripts oder eine seltene Anwendung aus, die diese Variablen überprüft, anstatt SHGetSpecialFolderPath oder ähnliche Funktionen zu verwenden (dies ist die empfohlene Methode für Win32-Anwendungen).

Lange Story-Sortierung: Sie können den Speicherort von Benutzerordnern nicht für einzelne Anwendungen ändern.

Verwandte Themen