Inno Setup5 如何更改卸载图标(我做出来的安装程序和卸载的一样)我想把卸载图标换成别的。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Inno Setup5 如何更改卸载图标(我做出来的安装程序和卸载的一样)我想把卸载图标换成别的。相关的知识,希望对你有一定的参考价值。

如题,能不能给出脚本?在线等解答。

1.准备好图标文件,和脚本放入同意目录下。
2.使用一个名为UpdateIcon.dll的插件
3.添加Code段,代码如下:
//插件函数用法
//参数: 句柄(插件错误对话框的父句柄), exe文件完整路径名称, (exe文件中要替换的)图标资源名称, 图标文件的完整路径名称, (exe中要替换的图标资源所在)语系
//返回值: 成功 = Tr, 失败 = False
function UpdateIcon(const hWnd: Integer; const exeFileName, exeIcon, IcoFileName: String; wlangID: DWORD): Boolean;
external \'UpdateIcon@files:UpdateIcon.dll stdcall\';

//替换卸载程序的图标
function UpdateUninstIcon(const IcoFileName: String): Boolean;
begin
//要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标,其它参数类似!
Result:= UpdateIcon(MainForm.Handle, \'\', \'\', IcoFileName, 0);
//替换卸载图标
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
sIcon: String;
begin
//注意: 替换卸载程序的图标,必须是在卸载程序生成之前!
//安装图标与卸载图标的格式与大小一致,否则可能会导致卸载程序出错!
if CurStep=ssInstall then
begin
sIcon:= ExpandConstant(\'tmp\\uninstall.ico\'); //定义卸载图标
ExtractTemporaryFile(ExtractFileName(sIcon)); //释放卸载图标
//要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!
UpdateUninstIcon(sIcon);//替换卸载图标
end;
end;
4、 编译之后就可以了。
参考技术A [code]
//插件函数用法:
//参数: 句柄(插件错误对话框的父句柄), exe文件完整路径名称, (exe文件中要替换的)图标资源名称, 图标文件的完整路径名称, (exe中要替换的图标资源所在)语系
//返回值: 成功 = True, 失败 = False
function UpdateIcon(const hWnd: Integer; const exeFileName, exeIcon, IcoFileName: String; wlangID: DWORD): Boolean;
external 'UpdateIcon@files:UpdateIcon.dll stdcall';

//替换卸载程序的图标
function UpdateUninstIcon(const IcoFileName: String): Boolean;
begin
// 要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!其它参数类似!
Result:= UpdateIcon(MainForm.Handle, '', '', IcoFileName, 0); //替换卸载图标
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
sIcon: String;
begin
//注意: 替换卸载程序的图标,必须是在卸载程序生成之前!
//建议安装图标与卸载图标的格式与大小一致,否则可能会导致卸载程序出错!
if CurStep=ssInstall then
begin
sIcon:= ExpandConstant('tmp\uninst.ico'); //定义卸载图标
// ExtractTemporaryFile('UpdateIcon.dll');
ExtractTemporaryFile(ExtractFileName(sIcon)); //释放卸载图标
// 要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!
if UpdateUninstIcon(sIcon) then //替换卸载图标
MsgBox('卸载程序图标 替换成功!', mbInformation, MB_OK)
else MsgBox('卸载程序图标 替换失败!', mbError, MB_OK);
end;
end;本回答被提问者采纳

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

【中文标题】Windows 7 上错误的桌面快捷方式图标(Inno Setup)【英文标题】:Wrong desktop shortcut icon on Windows 7 (Inno Setup) 【发布时间】:2011-05-22 23:26:55 【问题描述】:

我已经使用 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 并重新启动机器,但这也没有效果。

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

有什么想法吗?

【问题讨论】:

您的问题的编写方式让我相信这一切都发生在一台单独的 Windows 7 计算机上。您是否尝试过使用新图标重建 Inno Setup 文件并在 第二 计算机上运行它?这仍然显示旧图标吗? 我已经在“原始”Windows XP 和 Windows 7 机器上安装了这个应用程序。两者都正确呈现图标。什么可能会在我的机器上缓存旧图标?它只是拒绝死亡...... 发布安装程序脚本的 [图标] 部分,也许这会有所帮助。您的可执行文件是否仅包含您要使用的图标(即不是您不想要的临时图标)? 是的,如果在另外两台机器上安装后显示正确的图标,则问题与 Inno Setup 无关。它必须是你机器上的东西,并且有 96% 的可能性与缓存有关。 没有临时图标不再存在于应用程序或安装程序中的任何位置。我已将 [Icons] 声明添加到主题描述中。 【参考方案1】:

看来这确实与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

现在一切都按原样呈现。

【讨论】:

这是 Windows 中的一个错误(我记得 Win7 和 Vista 也是如此)。当整个 EXE 更改(不仅仅是图标)时,图标缓存完全不会注意到,即使在重新启动时也是如此。另一个问题是,如果你在 exe 存在之前创建快捷方式,那么 shell 会缓存一个通用图标并永远使用它,直到你手动强制愚蠢的东西重建缓存。 这似乎是一个非常糟糕的错误......尤其是在两个主要版本中仍然存在。 @Leo:我想我同意你的观点,因为我以前见过这个。您是否就此提交了错误报告(或者您是否知道已提交的任何错误报告)? @Cody Gray:我放弃了向微软提交错误报告。完全浪费时间,IMO。 :\ +1 谢谢!我已经在这上面浪费了足够多的时间,你让我浪费了更多的时间。我正在卸载并重新安装,但图标没有显示...【参考方案2】:

正如 swirlywonder 的回答,这个批处理脚本应该自动化这个过程:

rebuild-icon-cache.bat

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

【讨论】:

以上是关于Inno Setup5 如何更改卸载图标(我做出来的安装程序和卸载的一样)我想把卸载图标换成别的。的主要内容,如果未能解决你的问题,请参考以下文章

使用 inno setup 卸载默认图标

inno setup打包的安装文件更换位置后图标改变了

跪求inno setup补丁包更新后,卸载程序不能删除注册表?

更改 Inno Setup 卸载程序的默认名称以避免命名冲突

Inno setup更改桌面快捷方式图标

inno setup如何打包超过2G的东西