在我寻找答案的过程中,我已经多次看到类似于以下代码的示例:
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似乎没有SecurityCenter或SecurityCenter2名称空间,所以在尝试这种方法时,我得到了一个Invalid namespace异常。
有谁知道一种方法来确定Windows Server 2008上是否运行了防病毒软件?如有任何帮助,我们不胜感激!
发布于 2012-12-11 01:12:31
前段时间,我为一个客户遇到了这个问题,最后我在本地系统驱动程序和进程上执行了字典搜索,以寻找已知防病毒签名的模式(如文件夹名、进程名等)。这不是100%确定的,因为有人会在某个地方安装你不知道的全新杀毒软件,但除此之外,它是非常有效的……
发布于 2012-12-14 06:48:57
使用EICAR测试病毒。
让您的应用程序尝试在磁盘上写入以下文件之一:http://www.eicar.org/85-0-Download.html
它不仅能在地球上的每一个杀毒软件上工作,而且还能告诉你杀毒软件是否有效!
如果启用了防病毒软件,您可能会发现很难下载测试文件,因此您可能需要使用以下字符串:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*请记住,您可能希望将字符串编码在应用程序中,并在将其写入磁盘之前对其进行解码。否则,您的应用程序可能会被检测为病毒:)
在EICAR网站上,他们说:
任何支持EICAR测试文件的防病毒产品都应该在任何文件中检测到它,只要该文件以以下68个字符开头,并且长度恰好为68个字节
然而,我不会统计AV开发人员已经阅读了规范,所以最好是保持字符串的编码。事实上,我只是试图将字符串保存在我的桌面上的.txt文件中,里面有一些额外的字符,但Windows Defender开始尖叫起来。
发布于 2012-12-15 04:19:52
嗯,我最终和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 Server2008和2008 R2实例上都可以工作……
https://stackoverflow.com/questions/13732351
复制相似问题