2015-04-28 16 views
13

Ich schreibe eine Software, die ein Netzlaufwerk unter Verwendung der WNetAddConnection2 API abbildet. Falls dies relevant ist, handelt es sich um ein WebDAV-Laufwerk und nicht um eine normale SMB-Freigabe.Wie programmiere ich die Bezeichnung eines zugeordneten Laufwerks programmgesteuert?

Das Laufwerk nimmt einen Standardnamen an, den ich ändern möchte.

Einige Antworten auf dem Netz empfehlen System.IO.DriveType, zB:

DriveInfo[] allDrives = DriveInfo.GetDrives(); 

foreach (var drive in allDrives) 
{ 
    if (drive.DriveType == DriveType.Network && drive.Name.StartsWith("Z:")) 
    { 
     drive.VolumeLabel = "DriveInfo"; 
    } 
} 

Dieses unequivically nicht auf Netzlaufwerken funktioniert, und dies unterstützt durch MSDN, wo es angegeben ist, dass eine UnauthorizedAccessException Ausnahme wird geworfen werden.

Zweitens habe ich versucht, die Shell-Methode zu verwenden:

Shell32.Shell shell = new Shell32.Shell(); 
((Shell32.Folder2) shell.NameSpace("Z:")).Self.Name = "Shell"; 

Der Code führt ohne Fehler, aber das Laufwerk wird nicht umbenannt. Und das ist, wo es komisch wird, ich den Registrierungspfad gefunden, wo diese Dinge geschrieben werden:

HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ Explorer\ MountPoints2

Der obige Code einen Schlüssel erzeugt, die korrekt aussieht, und fügt eine _LabelFromReg REG_SZ mit „Shell“ als Wert . Dies spiegelt sich jedoch NICHT im Explorer oder anderswo wider.

Ich manuell umbenannt dann das Laufwerk, indem Sie mit der rechten Maustaste und wählen Sie "Umbenennen".

Dies schafft einen neuen, etwas anderen Schlüssel innerhalb MountPoints2, die perfekt funktioniert.

Also, der obige Shell-Code löst den Pfad nicht richtig auf - gibt es noch etwas, das ich ausprobieren kann? Das obige führt zu der Annahme, dass Windows einen anderen API-Aufruf intern verwenden muss, um das Laufwerk umzubenennen?


aktualisieren 1

Dies ist definitiv zu diesen ist WebDAV-Laufwerke verwandt ist. Es muss eine Verarbeitung unter der Haube stattfinden.

Meine Software Karten https://[email protected]/stuff/destination/docs. Dieser genaue Pfad kann mit dem Befehl Net Use angezeigt werden. Es ist dieser Pfad, den der Code shell oben der Registrierung hinzufügt und versucht, ihn zu benennen.

Wenn ich jedoch über das Laufwerk im Windows Explorer schwebe, gibt mir https://[email protected]/anotherfolder/stuff/destination und es ist dieser Pfad, der manuell in Explorer umbenannt in die Registrierung hinzufügt.

Alles, was ich bisher herausgefunden habe, ist, wie man den zweiten Pfad von einem WMI (Win32_LogicalDisk -> ProviderName) -Aufruf zurückgibt, aber ich möchte wirklich den manuellen Registrierungseintrag Ansatz vermeiden.

+0

Sind die „anderen Ordner“ zufällig genannt „DavWWWRoot“? – Syberdoor

Antwort

Verwandte Themen