.net 4.0 为什么本地Windows 7 Pro计算机不能读取自己的WMI值?

.net 4.0 为什么本地Windows 7 Pro计算机不能读取自己的WMI值?,.net-4.0,wmi,wmi-query,group-policy,.net 4.0,Wmi,Wmi Query,Group Policy,作为一个更大的.Net 4.0程序的一部分,我有一个查询WMI以获取网络适配器列表,并从中创建具有MAC地址的物理适配器列表 它在我试过的机器上工作,但是当发送到客户端时,列表是空的。如果在命令提示符下运行IPCONFIG/ALL,则会列出MAC 我的第一个想法是,存在一个阻止枚举的组策略,但到目前为止,我发现的一切都指向影响通过防火墙进行远程访问的组策略 我在本地以标准用户和管理用户的身份进行了尝试,两者都提供了相同的列表 空查询不会生成异常 我可以让他们去机器上检查个人权限,但因为这似乎是一

作为一个更大的.Net 4.0程序的一部分,我有一个查询WMI以获取网络适配器列表,并从中创建具有MAC地址的物理适配器列表

它在我试过的机器上工作,但是当发送到客户端时,列表是空的。如果在命令提示符下运行IPCONFIG/ALL,则会列出MAC

我的第一个想法是,存在一个阻止枚举的组策略,但到目前为止,我发现的一切都指向影响通过防火墙进行远程访问的组策略

我在本地以标准用户和管理用户的身份进行了尝试,两者都提供了相同的列表

空查询不会生成异常

我可以让他们去机器上检查个人权限,但因为这似乎是一个群体问题,所以这似乎是错误的方向。我错过了什么

  public static List<WmiNetworkInterfaceItem> QueryphysicalNetworkInterfaces()
    {
      ManagementObjectSearcher searcher =
          new ManagementObjectSearcher("root\\CIMV2",
          "SELECT * FROM Win32_NetworkAdapter");

      List<WmiNetworkInterfaceItem> result = new List<WmiNetworkInterfaceItem>();

      foreach (ManagementObject queryObj in searcher.Get()) {
        if (queryObj["PhysicalAdapter"].Equals(true)) {
          if (queryObj["AdapterTypeId"] != null) {
            if (queryObj["AdapterTypeId"].ToString().Equals("0")) {
              WmiNetworkInterfaceItem wmiNetworkInterfaceItem = new WmiNetworkInterfaceItem();
              wmiNetworkInterfaceItem.Name = ManagementObjectPropertyString(queryObj["Name"]);
              wmiNetworkInterfaceItem.MacAddress = ManagementObjectPropertyString(queryObj["MACAddress"]);
              wmiNetworkInterfaceItem.PhysicalAdapter = queryObj["PhysicalAdapter"].Equals(true);
              wmiNetworkInterfaceItem.AdapterType = ManagementObjectPropertyString(queryObj["AdapterType"]);
              wmiNetworkInterfaceItem.AdapterTypeId = -1;
              int.TryParse(ManagementObjectPropertyString(queryObj["AdapterTypeId"]), out wmiNetworkInterfaceItem.AdapterTypeId);
              wmiNetworkInterfaceItem.Description = ManagementObjectPropertyString(queryObj["Description"]);
              wmiNetworkInterfaceItem.PermanentAddress = ManagementObjectPropertyString(queryObj["PermanentAddress"]);
              result.Add(wmiNetworkInterfaceItem);
            }
          }
        }
      }
      return result;
    }
使用用户atp_09在评论中建议的Windows附带的WBEMTest实用程序,我可以让客户查询他的机器。使用此查询时,在标准用户帐户和管理用户帐户中只返回了一个适配器,表明计算机中没有任何东西阻止此操作

SELECT * FROM Win32_NetworkAdapter where PhysicalAdapter = true 

在进一步检查后,我后来用一个响应处理列表时出现了一个错误。

您是否尝试在虚拟机中测试此代码?我遇到了类似的问题,我使用c.net查询WMI以列出机器上安装的打印机。如果我在本地运行代码,它可以正常工作,但一旦到了虚拟机,我就使用VB6->C COM互操作,列表为空。客户端正在使用虚拟机吗?@atp_09这是真正的硬件。不幸的是,它位于一个被锁定的区域,我无法远程访问以进行测试。他们通过组策略禁用了USB端口。这就是为什么我认为这是一个政策问题。那么通过Wbemtest工具测试查询如何?你能试试吗?@atp\u 09谢谢。我不知道那个工具。可能需要几天时间,他们才能到达机器进行测试。是的,通过提供WQL并执行它,您可以使用它来实际测试细节。这是一个非常方便的工具。试试看,如果有什么不起作用,请告诉我们。但是,是的,你可能想试验一下这个工具。