Beim Versuch, das Verzeichnis CommonDocuments
aufzulösen, ist ein seltsamer Fehler aufgetreten.
Es wird weiterhin in das falsche Verzeichnis aufgelöst, nachdem das CommonDocuments-Verzeichnis mithilfe des Windows-Explorers an den neuen Speicherort umgeleitet / verschoben wurde (Eigenschaften -> Pfad aus dem Kontextmenü).
Ein minimaler funktionierender Code wäre:
%Vor% Erwartetes Verhalten:
Ausgabe ist D:\TestDocuments
Tatsächliches Verhalten:
Ausgabe ist C:\Users\Public\Documents
Keine; P / Invoke == & gt; C: \ Benutzer \ Öffentliche \ Dokumente
DONT_VERFIY, ALIAS_ONLY; P / Invoke == & gt; NOT_PARENT_RELATIVE, DEFAULT_PATH; P / Invoke == & gt; C: \ Benutzer \ Öffentlich \ Dokumente
Der korrekte Wert wird in der Windows-Registrierung (HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shellordner \ Gemeinsame Dokumente) gespeichert, aber von SHGetKnownFolderPath
(oder Environment.GetFolderPath
)
Betriebssystem: Windows 7 Professional x64
.NET Framework v4.0.30319
Die Anwendung wurde für die x86-CPU
Was ich bisher versucht habe:
Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments);
EDIT 2 Schritte zum Reproduzieren:
Properties
D:
namens TestDocuments
tl; dr: Das Verhalten ist von Entwurf und wird nur angezeigt, wenn Sie eine Assembly ausführen, die für x86-CPUs auf einem x64-Betriebssystem kompiliert wurde
Längere Version:
Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)
greift auf die 32-Bit-Struktur der Windows-Registrierung zu.
Der tatsächliche Pfad zum Ordner wird in der 64-Bit-Struktur gespeichert.
Das Problem wurde an das Windows-Team weitergeleitet und möglicherweise in einer zukünftigen Windows-Version behoben.
Weitere Informationen finden Sie unter der Microsoft Connect-Bericht
Problemumgehung Erstellen Sie eine Konsolenanwendung mit dem folgenden Code und kompilieren Sie sie für ANY CPU
%Vor%Rufen Sie es dann von Ihrer Hauptanwendung aus:
%Vor%Dies startet die ausführbare Datei ANY CPU , die nur den gewünschten Pfad zur Standardausgabe ausgibt. Die Ausgabe wird dann in der Hauptanwendung gelesen und Sie erhalten den tatsächlichen Pfad.
Tags und Links c# windows-7 .net-4.0 winapi known-folders