Windows 7上桌面快捷方式图标错误(Inno Setup)

22

我使用Inno Setup创建了一个安装程序。用于桌面快捷方式和开始菜单的图标嵌入在应用程序可执行文件中。

当最初创建安装程序时,由于尚未从设计团队获得最终产品图标,因此我使用了临时图标来完成安装程序。

一切都按照预期工作,直到我更改为最终图标后。现在,无论何处,桌面快捷方式和开始菜单图标始终显示旧图标,而其他地方的图标是正确的。

这是脚本的图标声明部分。

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; IconFilename: {app}\Icons\stop.ico
Name: {commondesktop}\{#MyAppVersionName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon; WorkingDir: {app}

下面是我尝试过的方法:(这是一个Windows 7系统)

如果我查看快捷方式属性,然后选择“更改图标”,我会看到正确的图标。重新选择它没有任何效果。我还尝试选择一个不相关的图标,然后重新选择正确的图标...仍然显示旧的图标。

我已经尝试了删除IconCache.db并重新启动机器的建议,但这也没有任何效果。

这个旧的图标从哪里来?它不在安装程序中出现。

有什么想法吗?


1
你提出问题的方式让我相信这一切都发生在一个单独的Windows 7电脑上。你是否尝试使用新图标重新构建Inno Setup文件并在第二台计算机上运行它?这样是否仍然显示旧图标? - Cody Gray
1
我已经在一台全新的Windows XP和一台Windows 7机器上都安装了这个应用程序。两者都能正确显示图标。那么到底是什么在我的电脑上缓存了旧图标呢?它就是不肯消失… - swirlywonder
请发布您安装脚本中的[图标]部分,或许这会有所帮助。您的可执行文件是否只包含您想要使用的图标(即不包含您不想要的临时图标)? - Bernard
3
是的,如果在其他两台计算机上安装后显示正确的图标,则问题与Inno Setup无关。这一定是您计算机上的某些问题,有96%的可能与缓存有关。 - Cody Gray
临时图标已不再存在于应用程序或安装程序中。我已经在主题描述中添加了[Icons]声明。 - swirlywonder
我同意。它正在缓存之前使用过安装程序的机器上,但我不知道缓存在哪里。 - swirlywonder
3个回答

31

看起来这确实与 IconCache.db 文件有关。我只能猜测某些步骤没有按照正确的顺序执行(尽管我尝试过多种不同的方式)。

以下是我手动执行重置的步骤:

  • 点击“开始”按钮 > 按住 Ctrl+Shift & 在“开始”菜单的空白区域右键单击。
  • 选择“退出资源管理器”。
  • 按下 Ctrl+Shift+Esc 组合键打开任务管理器。
  • 选择“文件” > “新建任务”。
  • 输入:cmd (然后按下 Enter 键),这将打开命令提示符。
  • 输入:cd /d %userprofile%\AppData\Local (然后按下 Enter 键)
  • 输入:attrib –h IconCache.db (然后按下 Enter 键)
  • 输入:del IconCache.db (然后按下 Enter 键)
  • 输入:start explorer (然后按下 Enter 键)

现在一切都可以正常显示了。


6
这是Windows系统中的一个漏洞(我记得Win7和Vista也有这个问题)。图标缓存不会自动更新,即使整个应用程序发生了变化(不仅仅是图标),甚至在重新启动计算机后也不会更新。另一个问题是,如果在应用程序还不存在时就创建了快捷方式,那么操作系统会缓存一个通用的图标并一直使用它,除非你手动强制操作系统重新生成缓存。 - Leo Davidson
这似乎是一个相当严重的错误...尤其是在两个主要版本之间仍然存在。 - swirlywonder
1
@Leo:我想我同意你的观点,因为我以前见过这种情况。你是否已经提交了错误报告(或者你知道有没有已经提交的)? - Cody Gray
1
+1 谢谢!我已经在这上面浪费了足够的时间,你帮我节省了更多的时间。我一直在卸载和重新安装,但图标仍然没有显示... - Joe
我在Windows 7上也遇到了这个问题,谢谢你的有用回答... :-) - ehsan0x
显示剩余2条评论

11

就像 swirlywonder 的回答中一样,这个批处理脚本可以自动化这个过程:

rebuild-icon-cache.bat

@echo off
taskkill /IM explorer.exe /F
cd /d %userprofile%\AppData\Local
del IconCache.db /a
start explorer.exe

0

有更好的方法。在安装程序中发送单独的.ico文件,然后使用[Icons]部分中的IconFilename参数来定位该图标,而不是exe文件中的图标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接