2015-04-28 4 views
13

Sto scrivendo un software che esegue il mapping di un'unità di rete utilizzando l'API WNetAddConnection2. Nel caso in cui sia rilevante, si tratta di un'unità WebDAV, anziché di una normale condivisione SMB.Come si modifica l'etichetta di un'unità mappata al livello di programmazione?

L'unità assume un nome predefinito che desidero modificare.

Alcune risposte sulla rete consiglia di utilizzare System.IO.DriveType, ad esempio:

DriveInfo[] allDrives = DriveInfo.GetDrives(); 

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

Questo unequivically non funziona su unità di rete, e questo sostenuta da MSDN, dove è affermato che un UnauthorizedAccessException eccezione sarà essere gettato.

secondo luogo, ho cercato di utilizzare il metodo shell:

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

Il codice eseguito senza errori, ma l'unità non viene rinominato. E questo è dove ottiene strano, ho trovato il percorso del Registro dove queste cose vengono scritte:

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

Il codice precedente crea una chiave che è corretto, e aggiunge un REG_SZ _LabelFromReg con "Shell" come valore . Tuttavia, questo NON si riflette in Explorer o altrove.

Ho quindi rinominato manualmente l'unità mappata, facendo clic con il pulsante destro del mouse e selezionando "Rinomina".

In questo modo si crea una nuova chiave leggermente diversa all'interno di MountPoints2 che funziona perfettamente.

Quindi, il codice shell di cui sopra non risolve del tutto il percorso correttamente: c'è qualcos'altro che posso provare? Quanto sopra mi porta a credere che Windows debba utilizzare internamente una chiamata API diversa per rinominare l'unità?


Aggiornamento 1

Questo è sicuramente legato a queste unità WebDAV che sono. Ci deve essere qualche elaborazione sotto il cofano in corso.

Le mie mappe software https://[email protected]/stuff/destination/docs. Il percorso esatto può essere visto con il comando Net Use. È in questo percorso che il codice shell si aggiunge al registro e tenta di nominare.

Tuttavia, passando con il mouse sull'unità in Esplora risorse mi viene fornito il https://[email protected]/anotherfolder/stuff/destination ed è questo percorso che il cambio di nome manualmente all'interno di Explorer aggiunge al registro.

Tutto ciò che è riuscito a capire finora è come restituire il secondo percorso da una chiamata WMI (Win32_LogicalDisk -> ProviderName), ma voglio davvero evitare l'approccio alla voce di registro manuale.

+0

è questo "altra cartella" per caso chiamato "DavWWWRoot"? – Syberdoor

risposta

Problemi correlati