Inno Setup 打包创建自定义后缀名的文件

2024-01-29 13:20

本文主要是介绍Inno Setup 打包创建自定义后缀名的文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近公司需要实现这样一个需求:用户双击即可打开我们公司自定义的文件,如abc.yoya,我使用了Inno Setup编译器(版本5.5.5)。由于第一次使用Inno Setup 编译器,使用过程中遇到了不少问题,但经过几天的短暂接触使用和测试,现在已经基本实现需求。现在将我的安装脚本(完整)和经验跟大家分享学习。脚本功能包括:安装协议,开始菜单快捷方式,桌面快捷方式,自定义文件类型,更改卸载图标和卸载名称,安装前的版本检测,修改注册表等。

一. 定义全局默认值和配置初始化信息

配置脚本如下:

; 脚本由 Inno Setup 脚本向导 生成!
; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!
; 定义基本参数,如应用名称,应用版本号,发布者名称,发布者主页,应用唯一ID值(该值用于在计算机注册表中作为该应用的唯一标识)
#define MyAppName "优芽互动电影播放器"
#define MyAppVersion "1.0"
#define MyAppPublisher "厦门优芽网络科技有限公司"
#define MyAppURL "http://www.yoya.com/"
#define APPID "YoyaPlay"[Setup]
; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。也可以自定义,如YoyaPlay)
AppId={#APPID}
; 程序名
AppName={#MyAppName}
;程序版本号
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}{#MyAppVersion}
;发布者
AppPublisher={#MyAppPublisher}
;相关连接
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
;默认安装目录
DefaultDirName={pf}\YoyaPlay
;默认开始菜单名
DefaultGroupName=YoyaPlay                  
;安装协议
LicenseFile=F:\9辅助软件\inno setup\Inno Setup 5\Examples\Readme.txt
;输出文件夹与文件名
OutputDir=C:\Users\netinnet\Desktop
OutputBaseFilename=setup
;安装图标
SetupIconFile=C:\Users\netinnet\Desktop\nw_32bit\yoya.ico
;卸载图标
Uninstallable=true
UninstallDisplayIcon={app}\yoya.ico
;压缩相关
Compression=lzma
SolidCompression=yes
;安装完成后要求重启,因为要刷新注册表,这样自定义的文件就不会被杀毒软件误认为是无效快捷方式
AlwaysRestart=yes
;备注版本信息
VersionInfoCompany=http://www.yoya.com/ 
VersionInfoDescription=优芽互动电影播放器  
VersionInfoVersion=1.0
VersionInfoCopyright=Copyright (C)2014

二. 定义使用语言、文件位置和提示消息

配置脚本如下:

;使用语言
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"[Files]
;注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
;我的应用程序位置,包括exe应用程序,ico图标,dll动态链接库等
Source: "C:\Users\netinnet\Desktop\nw_32bit\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
;卸载图标位置
Source: "C:\Users\netinnet\Desktop\nw_32bit\uninstall.ico"; Flags: solidbreak dontcopy
;卸载插件位置
Source: "C:\Users\netinnet\Desktop\nw_32bit\UpdateIcon.dll"; Flags: solidbreak dontcopy [Messages]
BeveledLabel=优芽互动电影播放器  
;卸载对话框说明  
ConfirmUninstall=您真的想要从电脑中卸载优芽互动电影播放器吗?%n%n按 [是] 则完全删除 %1 以及它的所有组件;%n按 [否]则让软件继续留在您的电脑上. 

三.  自定义注册表,开始菜单和桌面快捷方式

我的应用无需开始菜单和桌面快捷方式,故此处注释掉该部分代码:

;自定义注册表,用于在用户系统中创建,修改或删除注册表健值
[Registry]
Root: HKLM; Subkey: Software\YoyaPlay; ValueType: string; ValueName: Installed version; ValueData: '1.0'; Flags: uninsdeletekey
Root: HKCR; Subkey: "YoyaPlay"; ValueType: String; ValueData: "优芽网媒体文件";Flags: uninsdeletekey
Root: HKCR; Subkey: "YoyaPlay\DefaultIcon"; ValueType: String; ValueData: "{app}\yoyafile.ico";Flags: uninsdeletekey
Root: HKCR; Subkey: "YoyaPlay\shell\open\command"; ValueType: String; ValueData: "{app}\YoyaPlay.exe %1";Flags: uninsdeletekey
Root: HKCR; Subkey: ".yoya"; ValueType: String; ValueData: "YoyaPlay";Flags: uninsdeletekey;任务列表   
;[Tasks]
;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked  
;Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked  ;开始菜单,桌面快捷方式  
;[Icons]  
;Name: "{group}\YoyaPlay"; Filename: "{app}\YoyaPlay.exe"  
;Name: "{group}\{cm:ProgramOnTheWeb,YoyaPlay}"; Filename: "http://www.yoya.com"  
;Name: "{group}\{cm:UninstallProgram,YoyaPlay}"; Filename: "{app}\YoyaUninstall.exe"  
;Name: "{commondesktop}\YoyaPlay"; Filename: "{app}\YoyaPlay.exe"; Tasks: desktopicon  
;Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\YoyaPlay"; Filename: "{app}\YoyaPlay.exe"; Tasks: quicklaunchicon      

四. 执行代码

安装过程逻辑脚本:

;在执行脚本  
[code]
function GetInstalledVersion(): String;
var InstalledVersion: String;
beginInstalledVersion :='';RegQueryStringValue(HKLM, 'Software\YoyaPlay', 'Installed version', InstalledVersion);Result := InstalledVersion;
end;function InitializeSetup(): Boolean;
var PrevVer: String;
beginPrevVer := GetInstalledVersion();result := true;if length(PrevVer) > 0 then begin//如果发现程序已经安装过了MsgBox ('本程序的 ' + PrevVer + ' 版本已经安装,请卸载后再安装本程序. 安装程序将关闭.', mbError, MB_OK);result := false;end;
end;
//插件函数用法
//参数: 句柄(插件错误对话框的父句柄), 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 uninspath, uninsname, NewUninsName, MyAppName,sIcon: String;begin//注意: 替换卸载程序的图标,必须是在卸载程序生成之前!//建议安装图标与卸载图标的格式与大小一致,否则可能会导致卸载程序出错!if CurStep=ssInstall thenbeginsIcon:= ExpandConstant('{tmp}\uninstall.ico'); //定义卸载图标//ExtractTemporaryFile('UpdateIcon.dll');//该动态链接库可网上查找ExtractTemporaryFile(ExtractFileName(sIcon)); //释放卸载图标//要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!UpdateUninstIcon(sIcon) //替换卸载图标end;if CurStep=ssDone thenbegin// 指定新的卸载文件名(不包含扩展名),请相应修改!  NewUninsName := 'YoyaUninstall';  // 应用程序名称,与 [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'); end; // 以下修改相应的注册表内容if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#APPID}_is1') thenbeginRegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#APPID}_is1', 'UninstallString', '"' + uninspath + NewUninsName + '.exe"');RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#APPID}_is1', 'QuietUninstallString', '"' + uninspath + NewUninsName + '.exe" /SILENT');end;   
end;

如果想要在程序安装过程中或之后执行某批处理或打开某应用,可使用一下语句:

[Run]
Filename: "{app}\Reflash.bat"; Description: "正在刷新注册表"; Flags: runhidden;

至此大功告成,另外,所使用的ICO图标尺寸建议用128*128 。

应用图标:

安装过程:

卸载相关:

 

 

这篇关于Inno Setup 打包创建自定义后缀名的文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/657033

相关文章

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1