Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 病毒扫描程序锁定和删除临时文件-处理这些文件的最佳方法?_C#_Locking_Temporary Files_Antivirus - Fatal编程技术网

C# 病毒扫描程序锁定和删除临时文件-处理这些文件的最佳方法?

C# 病毒扫描程序锁定和删除临时文件-处理这些文件的最佳方法?,c#,locking,temporary-files,antivirus,C#,Locking,Temporary Files,Antivirus,我的应用程序处理来自不同来源的电子邮件,例如Outlook和IMAP邮箱。在解析它们之前,我将它们写入临时目录(将它们保存在内存中不是一个选项)。解析时,我可能正在将附件写入临时目录(例如,如果附件太大而无法保存在内存中或进行全文提取) 但在野外,发生了两件事情,起初看起来很奇怪,但都可以追溯到病毒扫描行为: 我有时无法打开几毫秒前自己编写的文件。它们显然被病毒扫描程序锁定,以确保它们是干净的。我有个例外 如果病毒扫描程序认为文件是危险的,它会在某个时间点删除这些文件 为了应对这种行为,我编

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

但在野外,发生了两件事情,起初看起来很奇怪,但都可以追溯到病毒扫描行为:

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

  • 如果病毒扫描程序认为文件是危险的,它会在某个时间点删除这些文件

为了应对这种行为,我编写了一些方法,在open失败时重试,或者检查文件是否存在,但我无法在应用程序的每个部分使用它们(第三方代码,例如过滤器),因此情况有所好转,但并非100%完美,我的源代码在某些方面也因此变得丑陋


如何处理病毒扫描程序?

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

您通常应将邮件过滤文件从病毒扫描程序中排除,并使用位于传入邮件系列中的专用邮件防病毒程序。一定要考虑让用户关闭他们的邮件服务器上的“删除感染文件”选项,否则他们可能会丢失邮件数据库:-/。例如,以下是如何配置AV以忽略Exchange: 但从另一个角度来看,文件中有病毒,因此您可能无论如何都不想传递它;-)


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

如果更改病毒扫描程序配置不是您的理想选择。从文件创建到流程结束,您能保持文件的打开状态吗?如果您获得了该文件的句柄,病毒扫描程序将无法使用它。

使用加密写入您的文件。我想你不需要太复杂或太复杂的事情。还可以加密或损坏文件名,因为病毒扫描程序可能也会因此触发。

这是一个包覆面处理应用程序,而不是内部应用程序。我可以告诉我的用户,但是他们要么忽略它,要么根本不读它。一个实用的解决方案值得考虑。不幸的是,有些文件是由第三方库编写的,无法写入流,但这些文件可以用不同的方式处理。不过,这并不能解决病毒扫描程序锁定文件的问题。有一些方法可以“钩住”文件写入过程,这样即使是第三方库也可以写入加密文件。甚至可能让文件句柄保持打开状态,以避免向病毒扫描程序发出信号,表明您已经完成了对该文件的处理。