我有一个功能可以检查Windows Defender Real Time是否启用或禁用,如下
public static bool GetRealTimeProtectionStatus()
{
bool enabled = false;
string path = @"Root\Microsoft\Windows\Defender";
string className = "MSFT_MpPreference";
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher($"SELECT * FROM {className} WHERE Path='{path}'"))
{
foreach (ManagementObject obj in searcher.Get())
{
// قراءة قيمة التفعيل
int realTimeScanDirection = (int)obj.GetPropertyValue("RealTimeScanDirection");
enabled = (realTimeScanDirection == 1);
break;
}
}
return enabled;
}
但是在排队
foreach (ManagementObject obj in searcher.Get())
我收到以下错误
System.Management.ManagementException: 'Invalid query '
我预计该程序可能需要权限来检查和更改 Windows Defender Real Time,因此我通过授予其系统管理员权限来运行该程序,但这对我来说不起作用。
要指定名称范围,请使用 ManagementScope 和 ManagementObjectSearcher 的构造函数,该构造函数将其与 ObjectQuery 一起使用。
string path = @"Root\Microsoft\Windows\Defender";
string className = "MSFT_MpPreference";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(new ManagementScope(path), new ObjectQuery($"SELECT * FROM {className}"));
顺便说一下,RealTimeScanDirection 的类型是 uint8,因此您需要将其转换为 byte。