当杀毒软件在安装我的软件时运行,某些组件无法正确安装。我总是告诉用户先关闭它。但他们会忘记,然后我就会费尽心思地想弄清楚出了什么问题。有没有Delphi函数可以检测杀毒软件是否在运行,这样我就可以在安装开始之前警告用户呢?
当杀毒软件在安装我的软件时运行,某些组件无法正确安装。我总是告诉用户先关闭它。但他们会忘记,然后我就会费尽心思地想弄清楚出了什么问题。有没有Delphi函数可以检测杀毒软件是否在运行,这样我就可以在安装开始之前警告用户呢?
自从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
另一个提示:尽量以任何可能的方式与您的用户沟通,以尽可能关闭启发式扫描。这些通常是误报的原因,比起完全关掉杀毒软件,这将是一个更容易传达的信息。
我们通过检查正在运行的进程来确定是否存在我们预先确定的杀毒程序之一,从而取得了成功。(您可以使用一些简单的代码枚举进程列表,这些代码可以通过搜索“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调用,除了枚举当前正在运行的进程...