首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中检测Windows Server2008上的杀毒软件?

如何在C#中检测Windows Server2008上的杀毒软件?
EN

Stack Overflow用户
提问于 2012-12-06 05:00:11
回答 5查看 7.5K关注 0票数 18

在我寻找答案的过程中,我已经多次看到类似于以下代码的示例:

代码语言:javascript
复制
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();
    }

  }
}

不幸的是,Windows Server2008似乎没有SecurityCenterSecurityCenter2名称空间,所以在尝试这种方法时,我得到了一个Invalid namespace异常。

有谁知道一种方法来确定Windows Server 2008上是否运行了防病毒软件?如有任何帮助,我们不胜感激!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-11 01:12:31

前段时间,我为一个客户遇到了这个问题,最后我在本地系统驱动程序和进程上执行了字典搜索,以寻找已知防病毒签名的模式(如文件夹名、进程名等)。这不是100%确定的,因为有人会在某个地方安装你不知道的全新杀毒软件,但除此之外,它是非常有效的……

票数 2
EN

Stack Overflow用户

发布于 2012-12-14 06:48:57

使用EICAR测试病毒。

让您的应用程序尝试在磁盘上写入以下文件之一:http://www.eicar.org/85-0-Download.html

  • Catch

它不仅能在地球上的每一个杀毒软件上工作,而且还能告诉你杀毒软件是否有效!

如果启用了防病毒软件,您可能会发现很难下载测试文件,因此您可能需要使用以下字符串:

代码语言:javascript
复制
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

请记住,您可能希望将字符串编码在应用程序中,并在将其写入磁盘之前对其进行解码。否则,您的应用程序可能会被检测为病毒:)

在EICAR网站上,他们说:

任何支持EICAR测试文件的防病毒产品都应该在任何文件中检测到它,只要该文件以以下68个字符开头,并且长度恰好为68个字节

然而,我不会统计AV开发人员已经阅读了规范,所以最好是保持字符串的编码。事实上,我只是试图将字符串保存在我的桌面上的.txt文件中,里面有一些额外的字符,但Windows Defender开始尖叫起来。

票数 6
EN

Stack Overflow用户

发布于 2012-12-15 04:19:52

嗯,我最终和PowerShell玩了一把:

代码语言:javascript
复制
$avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" -computername "." -filter "Name like '%antivirus%'"
if ($avSoftware.Count -gt 0) {
    foreach ($av in $avSoftware) {
        write-host $p.Name
    }
} else {
    write-host "No AV software found"
}

它似乎在我们的Windows Server2008和2008 R2实例上都可以工作……

更多信息请点击此处:https://serverfault.com/questions/12343/how-can-i-determine-whether-an-antivirus-product-is-installed

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13732351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档