1、前言

        在coding时,一位同事突然询问在VS+QT生成exe程序已经设置图标情况下,修改exe图标后不更新情况,在经过实际尝试后,确实出现该情况,故查找相关问题的资料,最终找到问题原因与解决方法,在此进行记录,方便后续同情况问题出现与解决。

        环境:Win11系统,VS2017,Qt5.12

2、问题原因

        先说找到的问题原因:这是WINDOWS系统图标缓存造成的,对图标使用了缓存的方法来加快显示速度;所以,在相同路径下相同名字和格式的文件,就会采用第一次生成(或者拷贝过来的文件)的图标来显示;只要路径、名字、格式等任何一个变了,系统就会认为是新的文件来显示图标并保存这个文件的图标。

3、解决方法

修改文件所在路径,修改文件名等都可实现图标的更新,但一旦改为原来的名字,则又会变回之前的旧图标,而删除 IconCache_.db 文件的方法与批处理命令的方法实际差不多(批处理命令实际上是通过批处理命令方式去删除 IconCache_.db 文件),所以在这里只介绍批处理命令方法

将以下命令复制,并添加到新建的文本文件中,保存并退出文件,将新建的文本文件重命名为“图标缓存清理.bat”,双击运行bat批处理脚本即可。

rem 关闭Windows外壳程序explorer

taskkill /f /im explorer.exe

rem 清理系统图标缓存数据库

attrib -h -s -r "%userprofile%\AppData\Local\IconCache.db"

del /f "%userprofile%\AppData\Local\IconCache.db"

attrib /s /d -h -s -r "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\*"

del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\iconcache_32.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\iconcache_96.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\iconcache_102.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\iconcache_256.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\iconcache_1024.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\iconcache_idx.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\iconcache_sr.db"

del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_32.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_96.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_102.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_1024.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_idx.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_sr.db"

rem 清理 系统托盘记忆的图标

echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v IconStreams
echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v PastIconsStream

rem 重启Windows外壳程序explorer

start explorer

这段批处理文件会删除 IconCache_.db 文件,同时还清理 thumbcache_.db 文件和注册表中的 IconStreams、PastIconsStream 两个值。清理速度很快,除了会重启一下资源管理器外没有副作用。 

在运行批处理脚本后,在清理,并重新生成程序即可得到更新图标的exe程序。

4、感谢

 经过多方查阅,最终在这位大佬的文章中,确定了问题所在

MFC的exe文件图标更改后依然显示原图标--WINDOWS系统图标缓存未清除或者重建造成的icon-default.png?t=O83Ahttps://blog.csdn.net/xxwssll/article/details/101694029#:~:text=%E8%BF%99%E6%98%AF%20WINDOWS%20%E7%B3%BB%E7%BB%9F%E5%9B%BE%E6%A0%87%E7%BC%93%E5%AD%98%E9%80%A0%E6%88%90%E7%9A%84%EF%BC%8C%E5%AF%B9%E5%9B%BE%E6%A0%87%E4%BD%BF%E7%94%A8%E4%BA%86%E7%BC%93%E5%AD%98%E7%9A%84%E6%96%B9%E6%B3%95%E6%9D%A5%E5%8A%A0%E5%BF%AB%E6%98%BE%E7%A4%BA%E9%80%9F%E5%BA%A6%EF%BC%9B%E6%89%80%E4%BB%A5%EF%BC%8C%E5%9C%A8%E7%9B%B8%E5%90%8C%E8%B7%AF%E5%BE%84%E4%B8%8B%E7%9B%B8%E5%90%8C%E5%90%8D%E5%AD%97%E5%92%8C%E6%A0%BC%E5%BC%8F%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%8C%E5%B0%B1%E4%BC%9A%E9%87%87%E7%94%A8%E7%AC%AC%E4%B8%80%E6%AC%A1%E7%94%9F%E6%88%90%EF%BC%88%E6%88%96%E8%80%85%E6%8B%B7%E8%B4%9D%E8%BF%87%E6%9D%A5%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%89%E7%9A%84%E5%9B%BE%E6%A0%87%E6%9D%A5%E6%98%BE%E7%A4%BA%EF%BC%9B%E5%8F%AA%E8%A6%81%E8%B7%AF%E5%BE%84%E3%80%81%E5%90%8D%E5%AD%97%E3%80%81%E6%A0%BC%E5%BC%8F%E7%AD%89%E4%BB%BB%E4%BD%95%E4%B8%80%E4%B8%AA%E5%8F%98%E4%BA%86%EF%BC%8C%E7%B3%BB%E7%BB%9F%E5%B0%B1%E4%BC%9A%E8%AE%A4%E4%B8%BA%E6%98%AF%E6%96%B0%E7%9A%84%E6%96%87%E4%BB%B6%E6%9D%A5%E6%98%BE%E7%A4%BA%E5%9B%BE%E6%A0%87%E5%B9%B6%E4%BF%9D%E5%AD%98%E8%BF%99%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E5%9B%BE%E6%A0%87%E3%80%82,a%29%E3%80%81%E6%9F%A5%E7%9C%8B%E6%96%B9%E5%BC%8F%EF%BC%9A%E5%9C%A8%E6%A1%8C%E9%9D%A2%E4%B8%8A%E6%9B%B4%E6%94%B9%E6%9F%A5%E7%9C%8B%E5%9B%BE%E6%A0%87%E7%9A%84%E6%96%B9%E5%BC%8F%EF%BC%9A%E5%A4%A7%E5%9B%BE%E6%A0%87%E3%80%81%E5%B0%8F%E5%9B%BE%E6%A0%87%E7%AD%89%EF%BC%8C%E5%86%8D%E6%94%B9%E5%9B%9E%E5%8E%BB%E3%80%82%20b%29%E3%80%81%E6%89%BE%E5%88%B0%E5%B9%B6%E5%88%A0%E9%99%A4%E5%9B%BE%E6%A0%87%E7%BC%93%E5%AD%98%E6%96%87%E4%BB%B6%E5%B9%B6%E9%87%8D%E5%90%AF%E8%AE%A1%E7%AE%97%E6%9C%BA%E3%80%82%20c%29%E3%80%81%E6%89%B9%E5%A4%84%E7%90%86%E3%80%82并在这位大佬的文章中找到了该批处理命令脚本的代码

图标显示不正常?试试强制刷新 Windows 图标缓存icon-default.png?t=O83Ahttps://sspai.com/post/42874在使用大佬原本的批处理脚本后,问题仍旧存在,但结合大佬文章中的方法一,推测原因可能在

%userprofile%\AppData\Local\Microsoft\Windows\Explorer\

路径下的iconcache_*.db相关文件上,所以,我修改了批处理脚本,增加了删除 iconcache_*.db相关文件的命令后,成功解决问题。

最后

感谢以上几位大佬的文章提供大致的解决方案,本文章为本人在遇到该问题时查找的本机可行的解决方案,不一定适用其他机器,如有问题,还望指正。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐