Я пытаюсь запросить у локального компьютера информацию о состоянии различных служб безопасности Windows, таких как Windows Defender и Firewall, используя WMI из system.management
. В целях тестирования я работаю в консольном проекте, и я просто пытаюсь получить доступ к MSFT_MpComputerStatus
и таким свойствам, как AMServiceEnabled
, но независимо от того, что я делаю, исключение выдается при попытке выполнить поиск через коллекцию.
Я очень новичок в WMI, так что, может быть, я что-то упустил, но я пытался заставить это работать несколько дней. В процессе поиска я нашел несколько различных примеров кода, показывающих, как получить доступ к свойствам. классов, таких как:
( Для нахождения всего в классе )
( Для доступа к свойствам в конкретном экземпляре ManagementObject )
( Использование инструмента создания кода WMI было предложено здесь )
Я пробовал все это, используя пространство имен: root\\Microsoft\\Windows\\Defender
и класс: 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;
}
При этом должны возвращаться некоторые значения bool, указывающие, включены ли службы или нет, но как только он достигает цикла foreach, выдается исключение «System.Management.ManagementException: этот метод не реализован ни в одном классе».
Я что-то здесь упускаю? Есть ли какой-то другой способ получения необходимой мне информации с помощью WMI?
Edit:
После еще нескольких поисков я также обнаружил, что MSFT_MpComputerStatus
также существует в root\\Microsoft\\protectionManagement
, но использование этого пространства имен дает тот же результат.
Редактировать 2:
Это проблема настроек. Протестировал приведенный выше код на 3 компьютерах разработки компании и одном компьютере, не предназначенном для разработки, и этот код отлично работал на компьютере, не предназначенном для разработки. Если я найду виновника, опубликую это здесь.
Редактировать 3:
Именно наша антивирусная система (bitdefender) является корнем проблемы. Работаем над поиском обходного пути, если есть.
Редактировать 4:
Смотрите мой собственный ответ.