我有一段代码试图在一秒钟内写入磁盘许多文件.但是,我已经安装了Kaspersky Anrivirus 2011.
Stream:= TFileStream.Create(sName, fmCreate);
该代码完全适用于卡巴斯基2010,如果我禁用其扫描仪(它不能完全从内存中卸载 - 除非它已卸载),它也适用于卡巴斯基2011.如果(Kaspersky 2011正在运行并且我懒散地写入磁盘),代码也可以工作.所以它显然不够快,无法处理我的磁盘请求.
我得到的错误是EFCreateError('无法创建xxx文件blablabla').错误是随机的.大多数文件都写入磁盘.大约10%的失败.
我曾试图获得支持但却无法在卡巴斯基找到真正的人与之交谈.他们所谓的"支持"实际上是一个FAQ数据库.当然,它讲的是如何安装产品和相关的东西.关于编程相关问题没有任何内容.有任何想法吗?
PS:这对整个Delphi社区都有影响!如果他们使用KIS 2011作为防病毒软件,我们所有客户都将无法使用Delphi软件.目前我建议我的用户禁用他们的防病毒软件,但我需要一个真正的解决方案.
如果有KIS 2011的人可以确认问题,那就太好了.只需创建一个小程序,使用TFileStream将200个小文件写入磁盘.
更新:
仅当文件不存在且创建(创建而不是覆盖)时才会出现此问题.
类似报道:https://forums.embarcadero.com/thread.jspa?threadID = 32751&tstart = 15
类似的报道:http://forum.kaspersky.com/index.php?showtopic = 120561
我想到的一个可能的解决方案是检测KIS是否正在运行,如果是,则在每次写入磁盘后都要延迟.或者在leat,让用户知道可能存在问题.谁知道如何检测服务是否正在运行?
我添加了650毫秒的延迟(每个文件创建后),但仍然存在错误).所以不是关于你写入磁盘的速度有多快,而是你写的文件数量.
刚卸载的KIS 2011.问题不再出现了.
刚重新安装好的旧KIS 2010.该错误仍然存在但很少出现(大约每300个文件,而不是KIS 2011中的大约30个).
问题在第二台计算机上得到证实.
新闻:崩溃出现在TFileStream.Create中,但它可能是由之前调用的函数引起的:TestWriteAccess.如果我禁用此功能,TFileStream.Create不会再失败.嗯,这不会改变太多事情.无论哪一行代码生成错误,程序仍然会(随机)在Kaspersky运行时将文件写入磁盘.
还在等待卡巴斯基真人的回复......
从卡巴斯基支持收到更多自动回复(我在几个国家/地区发送了电子邮件支持).所有指向FAQ数据库.
我将我的状态从卡巴斯基的粉丝(和顾客)改为卡巴斯基的仇恨,因为我终于收到了来自卡巴斯基支持的真人的答案,这简直令人讨厌.
要测试代码,请尝试在循环中使用代码来创建1000个文件.该程序创建了一堆文件(随机数),然后在StreamFile:= TFileStream.Create失败.更新:可以通过在创建每个文件后输入一个小延迟来解决此问题.
https://docs.google.com/forms/d/1H3_O1z1iEqfh9ZT9u3B0R1tGEj-Hc9o7rAE0LKPr33Y
2013年更新
从今天下午开始(更新后)KIS与Delphi发生冲突.每次编译项目时,KIS都会达到100%的CPU利用率.我将不得不卸载它.
2017年更新
从2017年开始,我所有的Delphi程序都会神奇地消失所有误报警.似乎卡巴斯基这样的程序从其病毒列表中删除了Delphi生成的可执行文件就足够了; 所有其他较小的防病毒程序紧随其后.
Delphi 7,Win 7(32),KIS 2011
您需要告诉您的用户,即卡巴斯基的客户,卡巴斯基正在干扰您的软件操作,并且他们应该报告它.表达您的挫败感,作为开发人员,您无法访问真正的人类.这是反恶意软件公司反应的唯一方式 - 与付费客户的公关差.