2015-04-28 5 views
13

Я пишу часть программного обеспечения, которое отображает сетевой диск, используя API WNetAddConnection2. На всякий случай это актуально, это привод WebDAV, а не обычный SMB-ресурс.Как программно изменить метку сопоставленного диска?

Привод принимает имя по умолчанию, которое я хотел бы изменить.

Некоторые ответы на сети рекомендуется использовать System.IO.DriveType, например:

DriveInfo[] allDrives = DriveInfo.GetDrives(); 

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

Это unequivically не работает на сетевых дисках, и это подкреплено MSDN, где он заявил, что UnauthorizedAccessException исключение быть брошенным.

Во-вторых, я попытался использовать метод оболочки:

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

код выполняется без ошибок, но привод не переименован. И это, где это становится странно, я нашел путь в реестре, где эти вещи получить написано:

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

Код выше создает ключ, который выглядит правильно, и добавляет _LabelFromReg REG_SZ с «Шелл» в качестве значения , Однако это НЕ отражается в проводнике или где-либо еще.

Затем я вручную переименовал отображаемый диск, щелкнув правой кнопкой мыши и выбрав «Переименовать».

Это создает новый, немного другой ключ в пределах MountPoints2, который отлично работает.

Итак, код оболочки выше не совсем правильно разрешает путь - есть ли что-то еще, что я могу попробовать? Вышеприведенное приводит меня к мысли, что Windows должна использовать другой API-вызов внутри, чтобы переименовать диск?


Update 1

Это, безусловно, связано с этими дисками, являющихся WebDAV. Должна быть какая-то обработка под капотом.

Мои программные карты https://[email protected]/stuff/destination/docs. Точный путь можно увидеть с помощью команды Net Use. Именно этот путь добавляет код shell к реестру и пытается назвать его.

Однако, зависание над диском в Проводнике Windows дает мне https://[email protected]/anotherfolder/stuff/destination, и именно этот путь, который переименовывает вручную в Explorer, добавляет в реестр.

Все, что мне удалось выяснить, это то, как вернуть второй путь из вызова WMI (Win32_LogicalDisk -> ProviderName), но я действительно хочу избежать подхода к записи в ручном режиме.

+0

Является ли это "другая папка" случайно называют "DavWWWRoot"? – Syberdoor

ответ