基础知识:面向Dot Net 4的C#WinForms桌面应用程序。
我正在使用System.IO.DriveInfo枚举系统上的所有驱动器。这工作得很好,并且还可以告诉我它是哪种类型的驱动器(固定/网络/cd-rom等)。它还可以给我VolumeLabel-在本地驱动器上可以按需运行,但是对于映射的网络驱动器,它可以为您提供主机上定义的逻辑磁盘的VolumeLabel。在Windows资源管理器中,可以给任何映射的驱动器起一个友好的名称。有没有办法以编程方式检索此友好名称?该名称显然是使用计算机的人所熟悉的名称。
例如,在下面的图像中,“Critical”和“NonCritical”在同一逻辑磁盘上可能是主机上卷名称为“Data”的不同共享。查询WMI的VolumeName返回“数据”,其他查询仅返回驱动器号,否则不返回。
我查看了通过WMI获得的信息(请参阅:How to programmatically discover mapped network drives on system and their server names?),但似乎没有返回此友好名称的属性。我查看了Caption,Description,SystemName和VolumeName-如下所示:
private void NetworkDrives()
{
try
{
var searcher = new ManagementObjectSearcher(
"root\\CIMV2",
"SELECT * FROM Win32_MappedLogicalDisk");
TreeNode share;
TreeNode property;
foreach (ManagementObject queryObj in searcher.Get())
{
share = new TreeNode("Name:" + queryObj["Name"]);
share.Nodes.Add("Caption: " + queryObj["Caption"]);
share.Nodes.Add("Description: " + queryObj["Description"]);
share.Nodes.Add("SystemName: " + queryObj["SystemName"]);
share.Nodes.Add("VolumeName: " + queryObj["VolumeName"]);
share.Nodes.Add("DeviceID: " + queryObj["DeviceID"]);
treeView1.Nodes.Add(share);
}
}
catch (ManagementException ex)
{
MessageBox.Show("An error occurred while querying for WMI data: " + ex.Message);
}
}
提前致谢。
最佳答案
使用Win32_Logicaldisk,您可以:
DeviceID : P:
DriveType : 4
ProviderName : \\localhost\download\Chic
FreeSpace : 26406707200
Size : 500000878592
VolumeName :
对于
DriveType
4,您将在UNC名称的最后部分找到卷。您只需要使用常规表达式即可获得它。根据您的评论进行编辑。
使用PowerShell(距离C#不远)可以编写为:
cd HKCU:
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2 | where {$_.name -like '*##localhost#download#Chic'} | % {(Get-ItemProperty -LiteralPath $_.name -Name _LabelFromReg)._LabelFromReg}
关于c# - 如何读取映射的网络共享的 "friendly name"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22015958/