在管理员模式下无法查询WMI

时间:2015-07-30 22:46:43

标签: c# windows wmi windows-10

我花了半天的时间才意识到,只要程序(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;
        }

澄清代码:在消息框上返回映射网络位置的字母和文件夹/卷名。

1 个答案:

答案 0 :(得分:0)

请参阅Win32_MappedLogicalDisk的评论,尤其是:

  

但是,是否返回实例取决于“控制面板”“管理工具”中的“本地安全策略”设置。如果将以下策略设置为“Object Creator”,则不会返回映射的驱动器实例,即使A是Administrators组的成员:   “系统对象:管理员组成员创建的对象的默认所有者。”

  

如果计算机上的用户A有多个会话,则不返回任何映射的驱动器实例(因为提供商没有合理的方法来决定使用哪个会话)。

因此,在某些情况下Win32_MappedLogicalDisk即使添加了驱动器也不会返回驱动器。我可能会检查安全设置,策略等。