作为更大的.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;
}
答案 0 :(得分:0)
在评论中使用用户 atp_09 建议的Windows附带的WBEMTest
实用程序,我可以让客户查询他的计算机。使用此查询时,标准管理用户帐户和管理用户帐户中都返回了一个适配器,表明计算机中没有任何内容阻止此操作。
SELECT * FROM Win32_NetworkAdapter where PhysicalAdapter = true
经过进一步审核后,我之后如何通过单一回复处理该列表时出现错误。