我正在尝试使用来自system.management
. 出于测试目的,我正在一个控制台项目中工作,我只是试图访问MSFT_MpComputerStatus
和属性AMServiceEnabled
,但无论我做什么,当尝试遍历集合时都会抛出异常。
我是 WMI 的新手,所以它可能只是我错过的东西,但我已经尝试让它工作了几天。通过我的搜索,我发现了一些不同的代码示例,展示了如何访问类的属性,例如:(用于查找类中的所有内容)
(用于访问特定 ManagementObject 实例的属性)
root\\Microsoft\\Windows\\Defender
我使用 namespace:和 class:尝试了所有这些,MSFT_MpComputerStatus
但没有任何效果。
下面是该工具制作的代码,即使这在我的控制台应用程序和工具本身中都失败了。
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\Microsoft\\Windows\\Defender",
"SELECT * FROM MSFT_MpComputerStatus");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("MSFT_MpComputerStatus instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("AMServiceEnabled: {0}", queryObj["AMServiceEnabled"]);
Console.WriteLine("AntispywareEnabled: {0}", queryObj["AntispywareEnabled"]);
}
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
这应该返回一些布尔值,指示服务是打开还是关闭,但是一旦到达 foreach 循环,就会抛出此异常“System.Management.ManagementException:此方法未在任何类中实现”。我在这里错过了什么吗?有没有其他方法可以使用 WMI 获取我需要的信息?
编辑:
经过更多搜索后,我还发现它MSFT_MpComputerStatus
也存在于 中root\\Microsoft\\protectionManagement
,但使用此命名空间会产生相同的结果。
编辑2: 这是一个设置问题。在 3 台公司开发电脑和一台非开发电脑上测试了上述代码,代码在非开发电脑上运行良好。如果我发现罪魁祸首是什么,我会把它贴在这里。
编辑3: 问题的根源在于我们的防病毒系统(bitdefender)。努力寻找解决方法(如果有)。
编辑 4: 查看我自己的答案。