RafaelFranckilin Ответов: 1

Vb.net получить статус защитника windows


Ребята, мне нужно получить статус защитника windows, но я не знаю, как это сделать с помощью vb.net-ты можешь мне помочь с этим?
Я использую этот код, но это не совсем так, как я хочу.

Что я уже пробовал:

Dim av_searcher As New ManagementObjectSearcher("root\SecurityCenter2", "SELECT * FROM AntivirusProduct")

       For Each info As ManagementObject In av_searcher.Get()
           MsgBox(info.Properties("displayName").Value.ToString())

           Dim AvStatus = Hex(info.Properties("ProductState").Value.ToString())
           If Mid(AvStatus, 2, 2) = "10" Or Mid(AvStatus, 2, 2) = "11" Then
               MsgBox("AntiVirus enabled")
           ElseIf Mid(AvStatus, 2, 2) = "00" Or Mid(AvStatus, 2, 2) = "01" Then
               MsgBox("AntiVirus disabled")
           End If

       Next info

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Ваша проблема здесь:

Dim AvStatus = Hex(info.Properties("ProductState").Value.ToString())

Вы преобразуете значение ProductState в строку, которая будет десятичной числовой строкой, а не десятичным числом, которое требуется шестнадцатеричной функции.

Вы объединяете вызовы методов вместе, что затрудняет отладку кода. Разбейте строку на отдельные операторы, чтобы вы могли видеть, с чем на самом деле имеете дело в отладчике.
Dim productStateValue As Integer = DirectCast(info.Properties("ProductState").Value, Integer)
Dim productState As String = Hex(productStateValue)

Мой VB довольно ржавый, так что это может работать не так, как написано, но вы поняли идею.


Maciej Los

5ed!

RafaelFranckilin

Я хотел бы получить только статус защитника windows, мой текущий код принимает статус любого установленного антивируса.

phil.o

Вы могли бы использовать WHERE предложение для дальнейшей фильтрации результатов:

Dim av_searcher As New ManagementObjectSearcher("root\SecurityCenter2", "SELECT * FROM AntivirusProduct WHERE displayName=""Windows Defender""")

RafaelFranckilin

Это решило мою проблему, большое вам спасибо.

phil.o

Пожалуйста.

Richard Deeming

Одна небольшая поправка - Cast должно быть либо то, либо другое DirectCast или CType.

Там же есть еще один TryCast оператор, но это работает только с ссылочными типами.

Dave Kreskowiak

Исправлено. Тот самый VB.NET он действительно ржавый.