【问题标题】:Python Windows Explorer Force RefreshPython Windows 资源管理器强制刷新
【发布时间】:2023-03-20 10:25:01
【问题描述】:

我有代码,但它不符合我的要求。我正在尝试通过 Python 脚本删除缩略图缓存。如果我打开了缓存和资源管理器,则某些 .db 文件不会被删除,因为它们正在被资源管理器使用。无论如何,在我的实验中,唯一的方法是更改​​显示图标/缩略图的高级文件夹设置,然后重新启动资源管理器。我可以通过注册表中的脚本更改设置,然后重新启动资源管理器。但是,重新启动资源管理器会停止脚本。所以,我不知道。我还尝试更改设置,然后通过 SendMessageTimeout() 发送 WM_SETTINGCHANGE 消息。那没有成功。

那么,任何人都知道如何从资源管理器(这也可能与其他正在使用的文件有关)解锁文件(可以安全删除)而不重新启动它?另外,我知道这是一个愚蠢的项目,但我有这样做的理由,这就是我想做的。

【问题讨论】:

  • 我继续调查,似乎终止文件句柄是删除它们的唯一方法。我找到了 Sysinternals 的“句柄”,使用它,并且缩略图缓存句柄没有关闭。 Windows 真的不希望删除这些文件,直到它说可以。磁盘清理是如何做到的? CCleaner 是如何做到的?

标签: python-3.x windows winapi


【解决方案1】:

如果我打开了缓存和资源管理器,则某些 .db 文件不会 删除,因为它们正被资源管理器使用。

因为thumbcache.dll 仍然有一个本地 thumbs.db 文件的打开句柄,并且当前没有实现以更动态和及时的方式释放文件句柄的机制。

它们只是为了与过时的应用程序兼容而生成的,而不是 Windows 操作所必需的。

要解决此问题,请启用“关闭隐藏 thumbs.db 文件中缩略图缓存”的用户组策略设置:

参考:http://support.microsoft.com/kb/2025703?

另外,您可以直接编辑注册表。参考:Let me fix it myself

相关:"The action can't be completed because the file is open in Windows Explorer"

【讨论】:

  • 好的,那么我将如何在代码中实现它,而无需更改组策略设置?该注册表项不存在。我在整个注册表中搜索了该值,但它不存在。 GP 设置在那里,但说它适用于 Vista,而不是较新的(我在最新的 10 上)。除非这意味着它是在 Vista 和更新的操作系统中实现的?
  • @malonn 几乎所有解决方案都指向更改组策略。在我的 Windows 10 上,我可以在组策略中启用“关闭...”,此操作将自动在注册表中生成 DisableThumbsDBOnNetworkFolders 键。如果需要使用编程方法,可以创建一个.reg文件,然后参考this link,复制一些必要的命令行,然后使用ShellExecute执行。
  • 出于实验目的,我将在代码中实现这一点,但我必须说,我的问题在于 thumbnailcache_xx.db 文件,而不是 thumbs.db。他们指的不是同一个文件吗? Thumbs.db 来自旧版本的 Windows。 Thumbcache.dll 可能还有一个 thumbnailcache_xx.db 文件的打开句柄,我会看看这些注册表设置是否允许我删除 thumbnailcache_xx.db 文件,但听起来并不完全相同。
  • @malonn 从 Windows Vista 开始,缩略图预览存储在系统上的一个集中位置。这为系统提供了独立于其位置的图像访问权限,并解决了 Thumbs.db 文件的位置问题。缓存存储在 %userprofile%\AppData\Local\Microsoft\Windows\Explorer 作为带有标签 thumbcache_xxx.db(按大小编号)的多个文件;以及用于在每个大小的数据库中查找缩略图的索引。
  • @malonn 你还需要Uncheck "Display file icon on thumbnails",参考:Unable To delete thumbs.db。我可以使用del "%LocalAppData%\Microsoft\Windows\Explorer\thumbcache*.db" /a(cmd 命令) 来删除 thumbnailcache_xx.db 文件。删除这些文件时,不要打开文件资源管理器。正如你所说,文件资源管理器可能正在使用他们的句柄。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多