在安装我的软件期间运行防病毒软件时,某些组件未正确安装。我总是告诉用户先把它关掉。但是,他们忘记了,然后我绞尽脑汁想弄清楚哪里出了问题。是否有任何人都知道的 Delphi 功能可以检测防病毒软件是否正在运行,所以我可以在安装开始之前提醒用户?
5 回答
从 XPsp2 开始,如果存在已知的防病毒软件,安全中心就会进行注册。
Afaik 这个函数通过 WMI api 运行,可以通过 Winapi 访问。(绝地有它的标题)。
我在这里找到了一些 VBScript:http: //blogs.msdn.com/b/alejacma/archive/2008/05/12/how-to-get-antivirus-information-with-wmi-vbscript.aspx
另一个提示:尝试以任何可能的方式与您的用户交流,以尽可能关闭启发式扫描。这些通常是误报的原因,与一起杀死防病毒软件相比,它可能更容易传达信息。
我刚刚在我的博客上写了一篇文章,它告诉您如何检测 Windows 桌面版(XP、Vista 和 7)中防病毒软件的存在。
Getting the installed Antivirus, AntiSpyware and Firewall software using Delphi and the WMI
我看到这是一个“旧”问题,但是......我发现它 使用 WMI 检索防病毒信息
某些组件未正确安装
说明您正在安装哪些组件,如何安装这些组件,以及它们的安装如何失败,这样会更容易推荐解决方案。另外,您使用的是安装程序产品,还是您自己的安装代码?如果是您自己的安装程序,或者您可以在安装程序后自动运行您自己的代码,您可以自己进行程序检查以确认您的安装是否 100% OK,如果不是,则报告失败并提醒用户关闭杀毒软件东西并重试安装。
通过检查我们事先确定为 AV 程序的任何进程的运行进程,我们取得了成功。(您可以使用一些简单的代码枚举进程列表,您可以通过谷歌搜索列出正在运行的进程 Delphi 找到这些代码)
如果我们找到一个,我们会告诉用户并拒绝继续...
为了构建我们知道是 AV 的进程列表,我们安装 AV 程序的试用版,然后查看进程列表(在任务管理器中,或使用我们的枚举进程代码)。发现它们并不难...您可以关闭 AV 程序并查看您识别的进程是否消失。(进程资源管理器很有帮助:http ://technet.microsoft.com/en-us/sysinternals/bb896653.aspx )
例如,我们目前寻找的一些进程包括 MCShield (McCaffe)、NPROTECT (Norton)、PCCNTMON (Trend Micro) 等。
显然,这不会捕获所有的 AV 程序,但是如果您与主要供应商(Norton、McCaffe、Trend Micro、ZA 等)进行上述操作,您将获得该领域中很大比例的 AV 程序。
这样做的好处是它很容易实现并且不需要任何非常低级别的 Windows API 调用,除了枚举当前正在运行的进程......