如何更改Inno Setup生成的卸载程序的名字与图标
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更改Inno Setup生成的卸载程序的名字与图标相关的知识,希望对你有一定的参考价值。
最近在学习Inno Setup打包软件,对于其中自动生成的卸载程序有些问题:
自动生成的程序名称为unins000,还包括一个同样名字的DAT格式文件。我想修改卸载程序Unins000的名称及其图标,但是却始终找不到该修改哪里!
UninstallDisplayName与UninstallDisplayIcon 这两个修改的只是程序在“添加\删除程序”控制面板里的名称与图标。
希望各位能帮我解决下这个问题,另外那个Unins000的DAT格式的文件令人太不爽了,怎么能不生成它啊?
我曾想过不让Inno Setup自动生成卸载程序,然后自己做个,但是也是没有思路啊!
一、修改卸载程序的图标
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、 编译之后就可以了。
二、修改卸载程序的名字
以下为引用Inno Setup 脚本的内容, 该示例脚本显示自定义卸载文件的名称(默认为 unins000.exe,unins001.exe 等等),自己注意看注释说明。
[Setup]
AppName=自定义卸载文件名示例程序
AppVerName=自定义卸载文件名示例程序 1.0
DefaultDirName=pf/自定义卸载文件名示例程序
DefaultGroupName=自定义卸载文件名示例程序
[Files]
Source: "MyProg.exe"; DestDir: "app"
Source: "MyProg.hlp"; DestDir: "app"
Source: "Readme.txt"; DestDir: "app"
[CODE]
procedure CurStepChanged(CurStep: TSetupStep);
var
uninspath, uninsname, NewUninsName, MyAppName: string;
begin
if CurStep=ssDone then
begin
// 指定新的卸载文件名(不包含扩展名),请相应修改!
NewUninsName := \'卸载\';
// 应用程序名称,与 [SEUTP] 段的 AppName 必须一致,请相应修改!
MyAppName := \'自定义卸载文件名示例程序\';
// 以下重命名卸载文件
uninspath:= ExtractFilePath(ExpandConstant(\'uninstallexe\'));
uninsname:= Copy(ExtractFileName(ExpandConstant(\'uninstallexe\')),1,8);
RenameFile(uninspath + uninsname + \'.exe\', uninspath + NewUninsName + \'.exe\');
RenameFile(uninspath + uninsname + \'.dat\', uninspath + NewUninsName + \'.dat\');
// 以下修改相应的注册表内容
if RegKeyExists(HKEY_LOCAL_MACHINE, \'SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/\' + MyAppName + \'_is1\') then
begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, \'SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/\' + MyAppName + \'_is1\', \'UninstallString\', \'"\' + uninspath + NewUninsName + \'.exe"\');
RegWriteStringValue(HKEY_LOCAL_MACHINE, \'SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall/\' + MyAppName + \'_is1\', \'QuietUninstallString\', \'"\' + uninspath + NewUninsName + \'.exe" /SILENT\');
end;
end;
end; 参考技术A `大胆说句``这好象是不可能的``除非你`重新把这个软件写一遍``根据自己的需要写`呵呵本回答被提问者采纳
以上是关于如何更改Inno Setup生成的卸载程序的名字与图标的主要内容,如果未能解决你的问题,请参考以下文章
更改 Inno Setup 卸载程序的默认名称以避免命名冲突
卸载失败,因为程序正在运行。如何在尝试删除之前让 Inno Setup 检查正在运行的进程?