System.Management.ManagementException:“无效查询”

问题描述 投票:0回答:1

我有一个功能可以检查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,因此我通过授予其系统管理员权限来运行该程序,但这对我来说不起作用。

c# windows user-permissions
1个回答
0
投票

要指定名称范围,请使用 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。

© www.soinside.com 2019 - 2024. All rights reserved.