我花了半天的时间才意识到,只要程序(c#)以管理员模式运行,我对WMI的所有查询都会返回0,但无论何时正常运行,它都会收到7的计数(其中是我应该得到的正确计数值)及其相关值。如果VS在ADMIN模式下运行,则在调试模式下也会发生此问题。
这是在Windows 10 final(并且截至2015年7月31日完成更新)。尝试了不同的框架(4.0-> 4.6),以防它与此有关,尽管很明显它没有。
以下是在正常情况下有效但不在ADMIN模式下的代码:
public static Dictionary<String, String> GetNetworkDrives()
{
Dictionary<String, String> RetuningDic = new Dictionary<string, string>();
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_MappedLogicalDisk");
MessageBox.Show("Query count: " + searcher.Get().Count.ToString());
foreach (ManagementObject queryObj in searcher.Get())
{
//Console.WriteLine("-----------------------------------");
//Console.WriteLine("Win32_MappedLogicalDisk instance");
//Console.WriteLine("-----------------------------------");
MessageBox.Show(queryObj["VolumeName"] + "||" + queryObj["DeviceID"]);
//String stuff = queryObj["ProviderName"] + "||" + queryObj["DeviceID"]; //queryObj["VolumeName"]
//Console.WriteLine(stuff);
}
MessageBox.Show("No errors");
}
catch (ManagementException e)
{
//Console.WriteLine("Error");
MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
}
return RetuningDic;
}
澄清代码:在消息框上返回映射网络位置的字母和文件夹/卷名。
答案 0 :(得分:0)
请参阅Win32_MappedLogicalDisk的评论,尤其是:
但是,是否返回实例取决于“控制面板”“管理工具”中的“本地安全策略”设置。如果将以下策略设置为“Object Creator”,则不会返回映射的驱动器实例,即使A是Administrators组的成员: “系统对象:管理员组成员创建的对象的默认所有者。”
和
如果计算机上的用户A有多个会话,则不返回任何映射的驱动器实例(因为提供商没有合理的方法来决定使用哪个会话)。
因此,在某些情况下Win32_MappedLogicalDisk即使添加了驱动器也不会返回驱动器。我可能会检查安全设置,策略等。