C# Visual Studios unfähigkeit Windows-Bibliotheken-Pfade zu verwenden beheben

lynxx

Lt. Junior Grade
Registriert
Feb. 2005
Beiträge
452
Mich hatte schon immer gestört das sich Visual Studio nicht daran stört wenn man die Pfade der Bibliotheken (Dokumente/Bilder/Musik/Video) ändert, sondern immernoch weiter fleissig auf z.B C:\Users\%Username%\Music verweist.

Code:
Console.WriteLine("C#: " + Environment.GetFolderPath(Environment.SpecialFolder.MyMusic));
Ergibt zum Beispiel bei mir:
C#: C:\Users\Lynxx\Music

Dabei ist der Pfad in der Bibliothek auf D:\Musik geändert.

Diese Bibliothekspfade merkt sich Windows in XML-Dateien die in
C:\Users\Name\AppData\Roaming\Microsoft\Windows\Libraries\Library Name.library-ms als versteckte Dateien liegen.

Mithilfe des Microsoft.WindowsAPICodePack kann man das aber umgehen.
Dazu muss man zu allererst in Visual Studio unter Tools->"NuGet Package Manager"->"Package Manager Console" ausführen.
In der Console dann:
Install-Package WindowsAPICodePack-Core
Install-Package WindowsAPICodePack-Shell

(Es gibt auch noch WindowsAPICodePack-ExtendedLinguisticServices, WindowsAPICodePack-Sensors & WindowsAPICodePack-ShellExtensions. Die sind aber hierfür nicht nötig.)

Dann seinem Project hinzufügen:
Code:
using System.IO;
using Microsoft.WindowsAPICodePack;
using Microsoft.WindowsAPICodePack.Shell;

Dann kann man den echten Defaultpfad für z.B Musik so finden:
Code:
String folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Microsoft\\Windows\\Libraries");
ShellLibrary shellLibrary = ShellLibrary.Load("Music", folderPath, true);
Console.WriteLine("WinAPI: " + shellLibrary.DefaultSaveFolder);
shellLibrary.Close();

Das ergibt das erwünschte Ergebnis:
WinAPI: D:\Musik

Hier noch einige Beispiele was man diesen Bibliotheken noch so machen kann ...

Viel spaß damit. :D
 
Du wirfst hier auch zwei Sachen durcheinander.

Das was du in der Bibliothek als Pfade setzt und das, was als Musik-Ordner gesetzt ist, sind zwei völlig unterschiedliche Dinge. Environment.GetFolderPath reagiert standardmäßig auf %userprofile%\Music und dort im Explorer auf Eigenschaften -> Pfad. In der Registry bildet das der Pfad HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\My Music ab. Wenn du hierbei die Pfade deiner Bilbiotheken selbst umänderst, hat dies natürlich keinerlei Einfluss auf vorher genannte Eigenschaft, da diese immer noch auf das Standardmäßige verweisen.

Du holst dir ja nur den Standardspeicherpfad der Bibliothek, was du selbst ebenso abgeändert hast. Das Ändern der obigen Umgebungsvariable hat aber ebenso zur Folge, dass der Standardpfad für Musik in der Bibliothek ebenso abgeändert wird.
 
Yuuri schrieb:
In der Registry bildet das der Pfad HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\My Music ab.
Gut zu wissen wo Visual Studio die Pfade herholt, aber die wenigsten Benutzer werden wohl in der Registry rumeditieren, sondern höchstens die Pfade der Bibliotheken ändern.
Und darum ging es mir, wenn ich die Standard-Pfad(e) der Bibliotheken in z.B einem Filerequester anbieten/durchsuchen will würde Visual Studio eben nur die Windows-Defaultpfade verwenden.
 
Das macht nicht VS, das macht das .NET bzw. Windows allgemein.

Das ist ganz normales Vorgehen seit XP und überall so unter "Ordner xyt verschieben" auffindbar.

http://windows.microsoft.com/de-de/windows/redirect-folder-new-location#1TC=windows-7
http://www.its05.de/windows-7/pfad-eigene-dokumente-aendern.php
http://www.wintotal.de/eigene-dateien-auf-eine-separate-partition-verschieben/
http://www.tippscout.de/eigene-dateien-verschieben_tipp_3480.html
usw.

Die Bibliotheken kamen lediglich unter 7 hinzu und erlauben nun mehrere Orte hinzuzufügen.
 
Yuuri schrieb:
Das macht nicht VS, das macht das .NET bzw. Windows allgemein.
Du verstehst gar nicht worum es geht, bzw wo das Problem liegt bzw warum ich diese Lösung gepostet habe.
 
Zuletzt bearbeitet:
Zurück
Oben