我正在编写一个使用WNetAddConnection2 API 映射网络驱动器的软件.万一它是相关的,这是一个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";
}
}
Run Code Online (Sandbox Code Playgroud)
这明确地不适用于网络驱动器,并且由MSDN支持,其中声明UnauthorizedAccessException将抛出异常.
其次,我尝试使用shell方法:
Shell32.Shell shell = new Shell32.Shell();
((Shell32.Folder2) shell.NameSpace("Z:")).Self.Name = "Shell";
Run Code Online (Sandbox Code Playgroud)
代码执行时没有错误,但不重命名驱动器.这就是它变得奇怪的地方,我找到了这些东西写入的注册表路径:
HKEY_CURRENT_USER\ Software\ Microsoft\ Windows\ CurrentVersion\ Explorer\ MountPoints2
上面的代码创建了一个看起来正确的密钥,并添加了一个_LabelFromReg带有"Shell" 的REG_SZ作为值.但是,这不会反映在资源管理器或其他任何地方.
然后我通过右键单击并选择"重命名"手动重命名映射驱动器.
这样做会创建一个新的,稍微不同的键,MountPoints2其中完美地工作.
所以,上面的shell代码并没有完全正确地解决路径 - 我还能尝试其他的东西吗?上面让我相信Windows必须在内部使用不同的API调用来重命名驱动器?
更新1
这肯定与这些是WebDAV驱动器有关.必须进行一些引擎盖下的处理.
我的软件地图https://myurl.com@ssl/stuff/destination/docs.使用该Net Use命令可以看到确切的路径.这是shell上面的代码添加到注册表并尝试命名的路径.
但是,在Windows资源管理器中将鼠标悬停在驱动器上会让我https://myurl.com@ssl/anotherfolder/stuff/destination和在Explorer中手动重命名的路径添加到注册表中.
到目前为止,我已经设法弄清楚如何从WMI(Win32_LogicalDisk - > ProviderName)调用返回第二个路径,但我真的想避免手动注册表项.
您可以在 C# 代码中使用 PowerShell,https: //msdn.microsoft.com/en-us/library/system.management.automation.powershell (v=vs.85).aspx
使用 PowerShell将驱动器盘符更改E为Q
$drive = Get-WmiObject -Class win32_volume -Filter "DriveLetter = 'e:'"
Set-WmiInstance -input $drive -Arguments @{DriveLetter="Q:"; Label="Label"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1574 次 |
| 最近记录: |