为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿晨1998 2019-11-29 09:57:55
是否可以使用C#检测计算机中是否安装了防病毒软件?我知道安全中心会检测到防病毒软件,但是如何在C#中检测到它?
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

根据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();

    }


  }

}


查看完整回答
反对 回复 2019-11-29
?
杨魅力

TA贡献1811条经验 获得超5个赞

在Vista SP2及更高版本中,WMI查询略有变化。

试试这个部分\ root \ SecurityCenter2而不是\ root \ SecurityCenter

结果也略有不同。您仍然可以获取显示名称,但是您需要对ProductState字段进行一些位屏蔽,以确定onAccessScanner是否启用/禁用以及upToDate类型的信息。


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 926 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信