病毒扫描器锁定并删除临时文件 - 如何应对最好?

6
我的应用程序涉及来自不同来源(例如Outlook和IMAP邮箱)的电子邮件。在对它们进行解析之前,我将它们写入临时目录(将它们保留在内存中不是一个选项)。在解析过程中,我可能会将附件写入临时目录(例如,如果它们太大而无法保留在内存中或者进行全文提取)。
但在实际使用中,有两件事情看起来非常奇怪,但可以追溯到病毒扫描器的行为:
1. 我有时无法打开我自己几毫秒前写的文件。它们显然被病毒扫描器锁定以确保它们是干净的。我会收到一个异常。 2. 如果病毒扫描器认为某些文件存在危险,它会在某个时间点删除这些文件。
为了应对这种行为,我编写了一些方法,如果打开失败则重试,或者检查文件是否存在,但我无法在应用程序的每个部分(例如过滤器等第三方代码)中使用它们,所以情况有所改善,但并不完美,并且我的源代码在某些地方看起来很丑陋。
你如何应对病毒扫描器?
4个回答

4
如果更改病毒扫描器配置不是您的理想选择,您能否在文件创建后保持其打开状态直到进程结束?如果您获取了文件句柄,则病毒扫描器将无法访问该文件。

1

使用加密方式编写您的文件。我认为您不需要任何过于复杂或深入的内容。同时,加密或修改文件名,因为病毒扫描器也可能被触发。


值得考虑的实用解决方案。不幸的是,一些文件是由无法写入流的第三方库编写的,但这些可以以不同的方式处理。然而,无法解决病毒扫描器锁定文件的问题。 - Stefan Schultze
1
有一些方法可以“挂钩”文件写入过程,以便即使您的第三方库也会写出加密文件。甚至可以保持文件句柄打开,以避免向病毒扫描器发出您已完成文件操作的信号。 - Joel Lucsy

0
通常应该从病毒扫描器中排除邮件过滤文件,并使用专门的邮件反病毒程序,它位于传入邮件管道中。一定要考虑要求用户关闭其邮件服务器上的“删除感染文件”选项,否则他们可能会丢失邮件数据库 :-/。例如,以下是如何配置 AV 忽略 Exchange 的方法:http://www.sophos.com/support/knowledgebase/article/12214.html 但另一种看待这个问题的方式是,文件中有病毒,因此您可能根本不想交付它 ;-)
之前的回答说要更改权限,以便只有您的进程可以访问文件。这样做行不通;任何值得一试的 AV 都将在内核中运行,并且可以访问文件。

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

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

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