Я пишу часть программного обеспечения, которое отображает сетевой диск, используя 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), но я действительно хочу избежать подхода к записи в ручном режиме.
Является ли это "другая папка" случайно называют "DavWWWRoot"? – Syberdoor