如何在C#中检测Windows Server 2008上的防病毒软件?

我在搜索答案时已经看过很多次类似于以下的代码示例:

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 Server 2008似乎没有SecurityCenterSecurityCenter2命名空间,因此在尝试此方法时会出现Invalid namespaceexception。

有谁知道确定Windows Server 2008上是否有防病毒软件运行的方法? 任何帮助表示赞赏!

我前段时间遇到了一个客户端问题,最后我在本地系统驱动程序和进程上执行了一次dictonary搜索,寻找一种已知的防病毒签名模式(例如文件夹名称,进程名称等等)。不是百分之百确定,因为在某个地方有人会下载你不知道的全新的反病毒,但除此之外,它非常有效……

使用EICAR测试病毒。

  1. 让您的应用程序尝试在磁盘上编写其中一个文件: http : //www.eicar.org/85-0-Download.html
  2. 抓住例外

它不仅适用于地球上的每一种反病毒,它还会告诉你反病毒是否活跃!

如果您的防病毒处于活动状态,您可能会发现很难下载测试文件,因此您可能希望使用此字符串:

 X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* 

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

在EICAR网站上,他们说:

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

但是,我不认为AV开发人员已经阅读了规范,所以最好只保留字符串编码。 事实上,我只是尝试将字符串保存在桌面上的.txt文件中,其中包含一些其他字符,Windows Defender开始尖叫。

嗯,我最终玩PowerShell了:

 $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 Server 2008和2008 R2实例上都有效…

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

这不是一个完美的解决方案,而是一个想法。 关于莱昂纳多的答案,如何使用实际的反病毒软件(链接它)来搜索其他反病毒软件? ClamAV是开源的,是一个很好的起点。 您“只”需要定义一个新的特别是特定的签名数据库。

根据大多数网站,Windows Server 2008上没有SecurityCenter和SecurityCenter2(因为您已经为自己设计过)。

我找到了这篇SO文章,其中包含一个解决方法。 如何使用WMI或其他CMI中的WMI检测安装在Windows 2003服务器和2008 Server 2003服务器R2和2008服务器R2上的防病毒软件

不可否认,这是一个C ++实现,但我认为没有理由不能将它移植到C#

还发现此页面建议使用OESIS框架。 http://social.msdn.microsoft.com/Forums/en/windowsgeneraldevelopmentissues/thread/b0806608-fee0-413c-a34d-674aeb11be3c