C# 如何以编程方式更改映射驱动器的标签?
我正在编写一个软件,它使用API映射网络驱动器。以防万一,这是一个WebDAV驱动器,而不是普通的SMB共享 该驱动器采用我想更改的默认名称 网上的一些答案建议使用System.IO.DriveType,例如:C# 如何以编程方式更改映射驱动器的标签?,c#,windows,C#,Windows,我正在编写一个软件,它使用API映射网络驱动器。以防万一,这是一个WebDAV驱动器,而不是普通的SMB共享 该驱动器采用我想更改的默认名称 网上的一些答案建议使用System.IO.DriveType,例如: DriveInfo[] allDrives = DriveInfo.GetDrives(); foreach (var drive in allDrives) { if (drive.DriveType == DriveType.Network && drive
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (var drive in allDrives)
{
if (drive.DriveType == DriveType.Network && drive.Name.StartsWith("Z:"))
{
drive.VolumeLabel = "DriveInfo";
}
}
这在网络驱动器上不起作用,并且由备份,其中声明将引发UnauthorizedAccessException
异常
其次,我尝试使用shell方法:
Shell32.Shell shell = new Shell32.Shell();
((Shell32.Folder2) shell.NameSpace("Z:")).Self.Name = "Shell";
代码执行时没有错误,但驱动器未重命名。这就是它变得奇怪的地方,我找到了写这些东西的注册表路径:
HKEY\U CURRENT\U USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2
上面的代码创建了一个看起来正确的键,并添加了一个带有“Shell”作为值的\u LabelFromReg
REG\u SZ。但是,这并没有反映在Explorer或其他任何地方
然后,我通过右键单击并选择“重命名”手动重命名映射的驱动器
这样做会在MountPoints2
中创建一个新的稍有不同的键,该键工作正常
因此,上面的shell代码没有正确解析路径-我还可以尝试其他方法吗?上述情况使我相信Windows必须在内部使用不同的API调用来重命名驱动器
更新1 这肯定与这些WebDAV驱动器有关。一定有一些引擎盖下的处理正在进行 我的软件映射
https://myurl.com@ssl/stuff/destination/docs
。使用netuse
命令可以看到确切的路径。上面的shell
代码将此路径添加到注册表并尝试命名
但是,在Windows资源管理器中将鼠标悬停在驱动器上会显示https://myurl.com@ssl/anotherfolder/stuff/destination
,在资源管理器中手动重命名会将此路径添加到注册表中
到目前为止,我只想知道如何从WMI(Win32_LogicalDisk->ProviderName)调用返回第二条路径,但我真的想避免手动注册表项方法。您可以在C代码中使用PowerShell 使用PowerShell将驱动器号
E
更改为Q
$drive = Get-WmiObject -Class win32_volume -Filter "DriveLetter = 'e:'"
Set-WmiInstance -input $drive -Arguments @{DriveLetter="Q:"; Label="Label"}
我知道这个问题已经很老了,但我在重新命名webdav驱动器号时遇到了完全相同的问题,并找到了解决方案 如果您曾经使用以下地址连接webDav驱动器,则会出现问题:
https://www.myurl.com:5006/myFolder
使用此url方案将导致注册表项位于:HKEY\u CURRENT\u USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2
“DavWWWRoot”将自动插入您的给定地址:
##myurl。com@SSL@5006#DavWWWRoot#myFolder
此外,如果您删除此驱动器,注册表项将持续存在,并且如果您已使其装载带有注册表项的驱动器,但注册表项中没有“davwwroot”字符串,也将阻止您通过脚本重命名该驱动器。(使用不同的url方案) 当您尝试使用Dan显示的方法自动重命名驱动器标签时,新名称将放置在具有不同路径(不带“DavWWWRoot”)的新注册表项上,并且不会使用新名称 解决办法是:
\\www.myurl。com@SSL@5006\myFolder
##myurl。com@SSL@5006#我的文件夹
Shell32.Shell=新的Shell32.Shell();
((Shell32.Folder2)shell.NameSpace(“Z:”).Self.Name=“shell”代码>