如何更改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卸载可执行文件的位置和名称

卸载失败,因为程序正在运行。如何在尝试删除之前让 Inno Setup 检查正在运行的进程?

inno setup 在卸载时如果想保留文件 使用uninsneveruninstall

关于Inno Setup卸载程序删除文件夹的问题

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