一尘不染

使用C#在Windows上检测防病毒

c#

是否可以使用C#检测计算机中是否安装了防病毒软件?我知道安全中心会检测到防病毒软件,但是如何在C#中检测到它?


阅读 388

收藏
2020-05-19

共1个答案

一尘不染

根据Microsoft的说法,Windows安全中心使用两层方法来检测状态。一层是手动的,另一层是通过Windows Management
Instrumentation(WMI)自动实现的。在手动检测模式下,Windows安全中心将搜索独立软件制造商提供给Microsoft的注册表项和文件。这些注册表项和文件使Windows安全中心可以检测独立软件的状态。在WMI模式下,软件制造商确定自己的产品状态,然后通过WMI提供程序将该状态报告给Windows安全中心。在两种模式下,Windows安全中心都会尝试确定以下各项是否成立:

存在防病毒程序。

防病毒签名是最新的。

防病毒程序的实时扫描或读写扫描已打开。

对于防火墙,Windows安全中心会检测是否安装了第三方防火墙以及是否打开了防火墙。

因此,为了确定是否存在防病毒软件,可以使用WMI与root\SecurityCenter名称空间建立连接(从Windows
Vista开始,必须使用root\SecurityCenter2名称空间),然后查询AntiVirusProductWMI类。

看看这个示例代码

using System;
using System.Text;
using System.Management;

namespace ConsoleApplication1
{
  class Program
  {
    public static bool AntivirusInstalled()
    {

      string wmipathstr = @"\\" + Environment.MachineName + @"\root\SecurityCenter";
      try
      {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmipathstr, "SELECT * FROM AntivirusProduct");
        ManagementObjectCollection instances = searcher.Get();
        return instances.Count > 0;
      }

      catch (Exception e)
      {
        Console.WriteLine(e.Message);
      }

      return false;
    }

    public static void Main(string[] args)
    {
      bool returnCode = AntivirusInstalled();
      Console.WriteLine("Antivirus Installed " + returnCode.ToString());
      Console.WriteLine();
      Console.Read();
    }

  }
}
2020-05-19