Delphi - 如何检测防病毒软件是否存在?

5

当杀毒软件在安装我的软件时运行,某些组件无法正确安装。我总是告诉用户先关闭它。但他们会忘记,然后我就会费尽心思地想弄清楚出了什么问题。有没有Delphi函数可以检测杀毒软件是否在运行,这样我就可以在安装开始之前警告用户呢?


有趣的问题 - 你正在写什么类型的软件? - Will A
1
如果这是一个经常出现的问题,我会说问题可能在于您的安装程序。请注意,由于Delphi在创建独立exe文件方面的强大功能,不需要臃肿的运行时库,因此很多病毒和恶意软件都是用它编写的。因此,反病毒软件经常会检测到一些病毒的部分,这些部分也存在于其他Delphi程序中。简单地关闭您的反病毒软件并不能解决问题 - 一旦重新开启,它就会干扰您的操作。 - GrandmasterB
1
@GrandmasterB:……与其依赖臃肿的运行时,Delphi 生成超级臃肿的单个可执行文件——这当然比一个庞大的运行时和微小的单个可执行文件更加令人惊叹。 - snemarch
1
@snemarch:并不像你想象的那么臃肿。Delphi的智能链接器能够剔除可执行文件不需要的运行库部分,从而使它们的大小保持在较小的范围内。 - Mason Wheeler
1
snemarch:与普遍观点相反,单独的运行时并不能节省太多空间,通常因为主二进制文件中也添加了小的存根、版本控制和解析代码。你通常需要更多的二进制文件才能达到平衡(因为你还需要弥补运行时中未使用的代码),除了操作系统和一些非常大的套件的二进制文件外,通常系统上没有那么多二进制文件,因为运行时库也是有版本控制的。 - Marco van de Voort
显示剩余2条评论
5个回答

3

3

自从XPsp2以来,就有安全中心来注册已知的杀毒软件。

据我所知,这个功能在WMI API上运行,可以通过Winapi访问。(而Jedi有对它的头文件)。

我在这里找到了一些VBScript:http://blogs.msdn.com/b/alejacma/archive/2008/05/12/how-to-get-antivirus-information-with-wmi-vbscript.aspx

另一个提示:尽量以任何可能的方式与您的用户沟通,以尽可能关闭启发式扫描。这些通常是误报的原因,比起完全关掉杀毒软件,这将是一个更容易传达的信息。


请确保您阅读了注释,因为在Vista SP1中,该代码片段将无法正常工作 - 他们删除了您所需的命名空间。 - Michael Madsen
评论中也有其他选择。它们都不是很好,但整个情况也不是很好。(正如我已经说过的,安装和“开启”也是不同的事情) - Marco van de Voort
我必须公开承认我downvoted了它。让用户减少其防病毒软件提供的保护程度是一个可怕的想法。请记住:100个误报还是比一个漏报好,而且通常启发式方法是有效的。 - Marcus Müller
启发式算法主要是为了让消费者感觉到防病毒软件在工作,他们花的钱物有所值。安全价值存疑,用户可能会混淆基于签名和基于启发式算法的真实风险。许多企业版没有或只启用了最安全的启发式算法。 - Marco van de Voort

1
请说明您正在安装哪些组件,如何安装这些组件以及它们的安装失败原因,这样更容易推荐解决方案。另外,您是使用安装程序还是自己的安装代码?如果是您自己的安装程序,或者如果您可以在安装程序之后自动运行自己的代码,您可以进行自己的编程检查以确认您的安装是否完全正常,如果不正常,则报告失败原因并提醒用户关闭防病毒软件并重试安装。

1

1
虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Jack

0

我们通过检查正在运行的进程来确定是否存在我们预先确定的杀毒程序之一,从而取得了成功。(您可以使用一些简单的代码枚举进程列表,这些代码可以通过搜索“List Running Processes Delphi”来找到)

如果我们发现有一个杀毒程序,我们会告诉用户并拒绝继续...

为了建立我们知道的进程列表,我们安装了杀毒程序的试用版,然后查看进程列表(无论是在任务管理器中还是使用我们的枚举进程代码)。很容易就能发现它们...你可以关闭杀毒程序,看看你识别出来的进程是否消失。(Process Explorer很有帮助: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)

例如,我们目前寻找的一些进程包括MCShield(McCaffe),NPROTECT(Norton),PCCNTMON(Trend Micro)等。

显然,这不会捕捉到所有的杀毒程序,但如果您对主要供应商(Norton、McCaffe、Trend Micro、ZA等)进行上述操作,您将覆盖市场上大部分杀毒程序。

其中一个好处是很容易实现,不需要任何真正的低级Windows API调用,除了枚举当前正在运行的进程...


非常脆弱 - 最好始终显示一个闪屏(不要像 EULA 或其他东西一样)告诉用户在安装过程中运行防病毒软件可能会有问题。 - snemarch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接