sti*_*ijn 14 windows-7 visual-studio
自从我开始使用 Windows 7 以来,这个问题一直困扰着我。有时我会在其他论坛上看到类似的问题,但我从来没有看到答案。以下是几乎总是会重现它的两种场景:
探索者之路
注意:如果在步骤 2 中等待一分钟或更长时间再上一个目录,则不会出现问题,可以删除该文件夹
Visual Studio 方式
注意:如果在步骤 2 中等待一分钟或更长时间再重新构建,则不会出现问题。
一些规格
显然,这两种情况都非常相似,并且具有极强的可重现性。所以我认为某些进程出于某种原因必须打开文件,然后再释放它。但是,使用 sysinternals
handle -a
Run Code Online (Sandbox Code Playgroud)
有问题的 exe 文件永远不会出现。(这是使用句柄的正确方法,对吗?)因此,当资源管理器/VS 报告他们无法访问该文件时,handle.exe 表示它没有在任何地方使用。这让我很无能为力,所以我想知道是否有人可以提出解决方案:为什么会发生这种情况,以及如何解决?
针对提出的问题进行更新:
Update 2 不能只是explorer:杀掉explorer.exe后,VS问题依然存在。
更新 3 按照 Asher 的建议使用 Process Monitor 揭示了有趣的事实:对于资源管理器模式,打开目录时有 10 次调用 IRP_MJ_CREATE。然而,只有 9 次调用 IRP_MJ_CLEANUP。所有这些调用都来自 shell32.dll,所以这绝对不是3rd 方安装问题。并且显然是缺少 IRP_MJ_CLEANUP 导致了问题:在打开目录后恰好 1 分钟,系统进程本身发出 IRP_MJ_CLEANUP 调用,文件被释放,并被删除。
但是,我仍然无法弄清楚为什么会发生这种情况。这是我所做的一些更改触发的资源管理器错误吗?
解决方案!查看我禁用的服务,我注意到Application Experience的描述说,我引用了Processes application compatible cache requests for applications as they are launch。听起来很熟悉。事实上,在启动服务后,我再也无法重现任何问题,而且 ProcMon 的输出不同且更短。不过很有趣,因为再次停止服务后,一切都还好,procmon 的输出仍然较短。
我在两台机器上尝试了这个,所有 3rd 方的东西都在愉快地运行,一切都还好。
我不确定这是否是一个真正的错误(人们可能会说“您对禁用服务有什么期望”),但是仅仅通过启动服务然后再次停止服务就可以解决问题并不完全正常。
任何能对此提供更深入见解的人都会获得赏金,否则@Asher 将我指向 ProcMon,这最终将我引向了正确的方向。
我认为您看到的问题与 Windows 资源管理器创建的 thumbs.db 相关。尝试禁用此功能,重新启动并查看问题是否重现。
要禁用 thumbs.db 打开组策略编辑器 (gpedit.msc),请转到用户配置 - 控制面板 > 管理模板 - 文件夹选项 > Windows 组件 - Viev 选项卡 > Windows 资源管理器。找到“关闭隐藏的thumbs.db文件中的缩略图缓存”并启用它不缓存缩略图。
如果它不起作用,我会尝试使用 Sysinternals Process Monitor 对其进行调查。当您访问被拒绝时,使用它来查看谁正在访问该文件夹。查看它是否实际上是访问被拒绝或共享冲突,这意味着有人持有该文件。
| 归档时间: |
|
| 查看次数: |
8631 次 |
| 最近记录: |