known-folders

___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123windows7 ___ Wird für Fragen zur Programmierung mit oder für Windows 7, einer früheren Version von Microsoft Windows, verwendet. Allgemeine Software- oder Fehlerbehebungsfragen, die nicht direkt mit der Programmierung zusammenhängen, sind nicht im Thema und sollten auf Super User veröffentlicht werden ___ answer7403773 ___

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:
%code% 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.

    
___ tag123net40 ___ Version 4.0 von .NET Framework. Verwenden Sie für Fragen speziell zu .NET Framework 4.0. Bei Fragen zu .NET Framework verwenden Sie im Allgemeinen das .net-Tag. ___ tag123winapi ___ Die Windows-API (früher als Win32-API bezeichnet) ist der Kernsatz von Anwendungsprogrammierschnittstellen, die für die Microsoft Windows-Betriebssysteme verfügbar sind. Mit diesem Tag können Sie Fragen zur Entwicklung nativer Windows-Anwendungen mit der Windows-API beantworten. ___ tag123Konfigurierte Ordner ___ Unter Microsoft Windows sind bekannte Ordner Konstanten, die Ordner mit einer besonderen Bedeutung darstellen. Beispiele: Desktop, Programmdateien, Systemsteuerung, Favoriten, ... Ab Windows Vista ersetzt "Bekannte Ordner" die Funktion "Spezielle Ordner" (CSIDL). ___ qstnhdr ___ SHGetKnownFolderPath / Environment.GetFolderPath () gibt einen falschen Wert für öffentliche Dokumente zurück ___ qstntxt ___

Beim Versuch, das Verzeichnis %code% 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 %code%

Tatsächliches Verhalten:
Ausgabe ist %code%

  

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 %code% (oder %code% )

Betriebssystem: Windows 7 Professional x64
.NET Framework v4.0.30319 Die Anwendung wurde für die x86-CPU

kompiliert

Was ich bisher versucht habe:

  • meine Anwendung neu starten
  • Neustart des Computers
  • Aufruf von %code%
  • direkte Aufrufe an Win32-API SHGetKnownFolderPath

EDIT 2 Schritte zum Reproduzieren:

  1. deaktivieren Sie die Benutzerkontensteuerung auf Ihrem Computer [und starten Sie sie neu!]
  2. gehe zu C: \ Benutzer \ Öffentlich \
  3. Klicken Sie mit der rechten Maustaste auf den Ordner "Öffentliche Dokumente" und wählen Sie %code%
  4. Wählen Sie die Registerkarte "Pfad"
  5. klicken Sie auf "Move ..." und wählen Sie einen (neuen) Ordner auf dem Laufwerk %code% namens %code%
  6. klicken Sie auf "Übernehmen"
  7. Akzeptieren, um alle Dateien an den neuen Speicherort zu verschieben, starten Sie das Minimale Anwendung oben
___
1
Antwort

SHGetKnownFolderPath / Environment.GetFolderPath () gibt einen falschen Wert für öffentliche Dokumente zurück

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 Speich...
01.04.2015, 08:14