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

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06