除非更改了文件扩展名,否则File.Delete上的UnauthorizedAccessException异常

时间:2018-07-06 16:30:45

标签: c# .net visual-studio-2017 console-application

我有最奇怪的问题。

我想在Windows控制台应用程序C#、. Net 4.5.2,VS2017(15.7.3)中执行以下操作。

foreach (var f in targetFiles)
{
    File.Delete(f);
}

targetFiles是具有完整路径规范的List<string>,例如C:\Directory\Filename.ext。我的路径字符串构造正确,因此根据需要加倍\\。我的目标目录是C:\Program Files\Provider Name\AppName\,其中包含.dll,.png,.xml和其他一些文件类型。

上面的代码仅对.png文件提供UnauthorizedAccessException。如果将.png文件的扩展名更改为(.tmp),则不会出现异常。

文件没有任何特殊属性,尽管我尝试使用File.SetAttributes(filename, FileAttributes.Normal),这没有什么区别。

我已经详尽地浏览了文件夹的权限,包括为所有人提供完全访问权限,向子级传播权限等。我是我自己的计算机上的管理员,并且我尝试通过VS和.exe本身执行,包括以管理员身份运行。

我尝试将文件夹完整复制到C:\,然后将应用程序指向此位置,以产生相同的行为。

有一些代码可以模拟网络用户(更广泛的目的是促进跨网络更新)-我已将其打开和关闭,而行为没有差异。

有人能提供一些建议吗?我已经阅读了很多相关的文章,但到目前为止,主要建议(文件属性,权限,VS权限)都没有成功。目前,我列表上剩下的唯一一件事就是查看域管理中是否可能存在干扰。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

杀毒软件可能阻止您的代码删除文件。尝试将您的文件夹添加到防病毒例外列表中。

答案 1 :(得分:0)

好吧,这是一个未经确认的答案,因为我将不得不与网络管理员交谈,但事实证明Sergei Zinovyev使我走上了正确的道路(谢谢)。我在McAfee的防病毒状态监视器中查看了该活动,并发现了许多DOMAIN\USER ran PROGRAM.EXE, which tried to access C:\DIRECTORY, violating the rule "Deleting files commonly targeted by ransomware-class malware", and was blocked. For information about how to respond to this event, see KB85494(替换为真实数据)的情况。

作为参考,我尝试使用Handle并找不到对文件的任何引用,因此我也尝试了Eric J.的回答here,该文件未返回任何锁。

虽然只有.png会失败,这似乎很奇怪-我被允许删除dll但不能删除png有点奇怪。

当我可以放宽防病毒规则时,我会再次响应以确认问题已解决。

感谢您的所有帮助。