Windows 7访问拒绝可执行文件..是什么?
自从我开始使用Windows 7以来,这个问题一直困扰着我。我不时在类似的论坛上看到类似的问题,但是从来没有看到答案。这是几乎总是重现它的两种情况: 探索者之路 使用资源管理器,导航到包含至少一个exe文件的目录 立即上一个目录 删除刚刚导航到的目录 Yields Folder Access Denied对话框指出您需要执行此操作的权限,需要管理员权限才能更改此文件夹,并使用按钮Again和Cancel 进行更改。 点击“重试”永远不会立即生效。等待一分钟左右,然后再次单击可以正常工作 注意:如果在第2步中等待一分钟或更长时间再上一个目录,则不会发生此问题,并且可以删除该文件夹 Visual Studio方式 建立一个产生exe文件的项目 运行可执行文件然后关闭它 立即再次构建项目(例如,通过更改源文件中的单个字符) 产生致命错误LNK1168:无法打开/path/to/the.exe进行写入 注意:如果在步骤2中等待一分钟或更长时间再重新构建,则不会发生此问题。 一些规格 在VS2008 / 2010/2011上的Windows 7 32位和64位上均会发生 发生在3台不同的机器上 我没有任何类型的病毒扫描程序 我确实禁用了一堆服务,但是没有什么可以阻止Windows正常运行,也禁用了UAC 发生在任何类型的光盘上 我总是使用管理员组中的用户帐户 显然,这两种情况都非常相似,并且具有很高的可重复性。因此,我认为出于某种原因必须打开该文件,然后再将其释放。但是,使用sysinternals handle -a 该问题的exe文件从不显示。(这是使用handle的正确方法,对吗?)因此,在explorer / VS报告他们无法访问文件时,handle.exe表示该文件未在任何地方使用。这使我变得一无所知,所以我想知道是否有人可以提出解决方案:为什么会发生这种情况,以及如何解决? 更新以回答提出的问题: 我无法在安全模式下重现该问题 一堆的外壳扩展安装。从SellExView,这里是所有计算机通用的非Microsoft软件:NitroPDF,WinRAR,TortoiseGit,TortoiseSvn,NVidia。我会发现Tortoise的最可疑,尽管将“状态缓存”选项都设置为“仅针对一个文件夹的状态缓存,没有递归覆盖”,即没有TortoiseCache.exe运行。 对于资源管理器问题,ProcessExplorer不显示可执行文件。虽然它确实显示了可执行文件的目录,但是即使将其删除后仍会继续显示它,因此似乎没有任何关系 对于VS问题,即使在目标目录上没有打开资源管理器窗口时,VS也会发生这种情况。同样,ProcessExplorer不会显示可执行文件,也不会显示可执行文件所在的目录。请注意,在VS的这种“模式”下,仅在运行可执行文件时才会出现问题。如果不运行它,我可以不断构建它。 在“ VS模式”下,并且在可执行文件的目录中打开了一个资源管理器窗口(仅使用C#exe测试),这变得很奇怪:我无法再次构建,因为VS抱怨该exe正在被另一个进程使用。但是,如果我从打开的资源管理器窗口中删除了exe,则此方法有效,因此构建成功。同样,ProcessExplorer中没有任何引用。这似乎与我的发现与handle.exe匹配(PE和handle始终在内部不使用相同的API吗?) 更新2 它不能只是资源管理器:在杀死explorer.exe之后,VS问题仍然存在。 Update 3 使用Asher建议的Process Monitor揭示了一个有趣的事实:对于资源管理器模式,打开目录后有10个对IRP_MJ_CREATE的调用。但是,只有9个呼叫IRP_MJ_CLEANUP。所有这些调用都源自shell32.dll,因此绝对不是第三者安装问题。显然是导致该问题的缺少IRP_MJ_CLEANUP的原因:打开目录后恰好1分钟,系统进程本身发出了IRP_MJ_CLEANUP调用,文件被释放并被删除。 …