病毒扫描程序锁定和删除临时文件 - 应对它们的最佳方法?

Posted

技术标签:

【中文标题】病毒扫描程序锁定和删除临时文件 - 应对它们的最佳方法?【英文标题】:Virus scanners locking and deleting temporary files - best way to cope with them? 【发布时间】:2008-10-18 10:13:30 【问题描述】:

我的应用程序处理来自不同来源的电子邮件,例如Outlook 和 IMAP 邮箱。在解析它们之前,我将它们写入临时目录(不能将它们保存在内存中)。在解析时,我可能会将附件写入临时目录(例如,如果它们太大而无法保存在内存中或无法提取全文)。

但在野外,发生了两件事,一开始看起来很奇怪,但都可以追溯到病毒扫描程序的行为:

有时我无法打开几毫秒前自己编写的文件。它们显然被病毒扫描程序锁定以确保它们是干净的。我得到一个例外。

如果文件被病毒扫描程序认为是危险的,它会在某个时间点将其删除。

为了应对这种行为,我编写了一些方法,在打开失败时重试或检查文件是否存在,但我无法在应用程序的每个部分使用它们(第 3 方代码,例如示例过滤器),所以事情变得更好了,但不是 100% 完美,因此我的源代码部分看起来很丑。

您如何应对病毒扫描程序?

【问题讨论】:

【参考方案1】:

如果更改病毒扫描程序配置不是您的理想选择。您能否从创建文件到进程结束保持文件打开?如果您对文件有句柄,病毒扫描程序将无法使用它。

【讨论】:

【参考方案2】:

用加密方式编写您的文件。我认为你不需要任何太棘手或涉及的东西。还要加密或破坏文件名,因为病毒扫描程序也可能由此触发。

【讨论】:

值得考虑的务实解决方案。不幸的是,有些文件是由无法写入流的 3rd 方库编写的,但可以以不同的方式处理这些文件。但不能解决病毒扫描程序锁定文件的问题。 有一些方法可以“挂钩”文件写入过程,这样即使您的第三方库也会加密写入。甚至可能让文件句柄保持打开状态,以避免向病毒扫描程序发出您已完成文件处理的信号。【参考方案3】:

您通常应该从病毒扫描程序中排除邮件过滤文件,并使用位于传入邮件系列管道中的专用邮件防病毒程序。绝对考虑要求您的用户关闭其邮件服务器上的“删除受感染文件”选项,否则他们可能会丢失邮件数据库:-/。例如,您可以通过以下方式配置 AV 以忽略 Exchange: http://www.sophos.com/support/knowledgebase/article/12214.html 但另一种看待它的方式是文件中存在病毒,所以你可能不想传递它;-)

先前的答案说要更改权限,以便只有您的进程才能访问文件。那是行不通的;任何称职的 AV 都将在内核中运行,并且无论如何都可以访问文件。

【讨论】:

【参考方案4】:

病毒扫描程序有排除文件夹。只需查看文档并将您的临时文件夹添加到此列表中即可。

【讨论】:

这是一个收缩包装应用程序,不是内部的。我可以告诉我的用户,但他们要么忽略它,要么根本不阅读。

以上是关于病毒扫描程序锁定和删除临时文件 - 应对它们的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

用于运行被防病毒扫描程序删除的 Java 应用程序的 Windows 可执行文件

在 MVC3 中检查上传文件是不是有病毒

最全“勒索病毒”的应对方案

从 Delphi 应用程序中激活文件病毒扫描

无法下载检测到病毒

防止使用 nio 删除锁定文件