inno setup技巧篇

article/2025/11/6 17:20:55

Inno setup 中级技巧

  • 介绍
    • 提前预习
    • 技巧内容
      • 1.修改界面上的提示语
      • 2.自动指定上一次安装的路径
      • 3. 安装时控制安装的路径,但是显示上次安装的路径
      • 4.卸载完成后不残留文件
      • 5.安装时运行批处理文件
      • 6.安装包制作过程中怎么调试
      • 7.控制面板中安装包显示的名字
      • 8.脚本中使用其他插件(.dll)的方法
      • 9.脚本太长时,include方式整理脚本
      • 10.打包2G以上的文件
    • 总结(工具链接)

介绍

Inno setup 是一个免费的windows安装程序制作软件.windows 98,2000,XP,NT4.0,Me以及更高的版本均可使用.
软件打包中常用到的功能有:
*定制安装方式,如:自定义安装,完全安装
*拥有自由可控的卸载功能
*创建快捷方式,包括开始菜单和桌面
*创建注册表和.ini项目
*支持密码加密
*后台安装和后台卸载
*安装前和安装后执行一系列活动,比如检测注册表是否存在或写入注册表,检测进程是否运行,检测文件版本
*文件压缩,支持bzip2、7-Zip 、lzma格式的压缩.安装程序可以比较文件版本信息,替换正在使用的文件

市面上的很多软件都在使用此款软件作为安装包工具, 例如: bandicam ,迅雷,notepad++,foxmail, FileZilla,PotPlayer,navicat等等……
因为打包快捷,而且可以自己开发插件(.dll)放进去使用.

提前预习

基本的使用方式百度上搜的话能搜出一大堆比如搜”inno setup打包工具使用” “inno setup脚本编写”,但是简单使用的方式,有时候会满足不了客户的特殊需求,所以这次要讲的是百度上有点难搜到,而且是我从入职以来到至今的写安装包的经验总结出来的几点技巧.

  1. inno setup脚本分为几个段落 ,这几个段落需要记住;
  2. [setup],该段包含用于安装程序和卸载程序的全局设置。某些指令对于你创建的任何安装程序都是必需的;
  3. [Icons] ,这个可选段定义所有穿件在开始菜单和其他位置(比如桌面)快捷方式;
  4. [Languages] ,用来定义安装程序中可使用的语言;
  5. [UninstallRun] ,同样是可选的,用来指定在卸载第一步要执行的一些程序.除在下面有注释的外,两个段使用相同的语法;
  6. [Registry] ,这个可选段用来定义一些你想用安装程序在用户系统中创建、修改或删除的注册表键/值;
  7. [Tasks] ,这个段是只选的。它定义安装程序在执行安装期间所有由用户定制的任务。这些任务以选项框和单选项形式在附加任务向导页面中出现;
  8. [UninstallDelete] ,该可选段定义你要卸载程序删除的任何附加文件或目录,除了那些用 [Files] 或 [Dirs] 段条目安装/创建的以外。删除由应用程序创建的 .INI 文件,对于该段是常用的一种方法。该卸载程序处理这些项作为卸载的最后一步;
  9. [Dirs],这个可选段用来定义除创建用户选择的应用程序目录外安装程序自动创建的另外目录。在主应用程序目录下创建子目录对于这个段是公共使用的;
  10. [INI],这个可选段用来定义除创建用户选择的应用程序目录外安装程序自动创建的另外目录。在主应用程序目录下创建子目录对于这个段是公共使用的;
  11. [LangOptions],用于定义特殊语言设置,象字体一样,被安装程序和卸载程序使用。通常,你不需要在脚本文件中创建 [LangOptions] 段,按默认值,由于特殊语言设置在 Inno Setup 的 Default.isl 文件(或由 [Languages] 段条目指定的那个文件)中已经包含

上述内容都可以在附件的 Isetup.chm文档中找到….

技巧内容

1.修改界面上的提示语

开始界面上的提示内容修改,主界面上的内容可以分为两块,如图画蓝线的和画红线的
在这里插入图片描述
画蓝线的在脚本中应该修改的位置, 是[setup]下的AppName和AppVersion如下图:
在这里插入图片描述
画红线的在脚本中默认是不显示的,修改的话需要自己加上[Messages],下面的各种属性需要到百度找, 附件中是我从百度下载下来的[Messages]的属性列表

效果如下:
在这里插入图片描述
在这里插入图片描述
安装完成页面上的提示语修改
在这里插入图片描述
在这里插入图片描述
还有其他界面上的内容也可以修改如:
准备界面(wpReady)
licence界面(wpLicense)
选择菜单分组界面(wpSelectProgramGroup)
选择安装路径界面(wpSelectDir)
自定义界面的话可以在创建界面时在[code]里直接修改,如图
在这里插入图片描述
在这里插入图片描述
例子就讲到这里,还有很多属性能修改,需要的可以从附件中拿到[Message]中的属性,这些属性都可以在……/inno/Default_cn.isl 这个文件中找到,是语言库…
脚本中也可以自己选取使用某个语言库,如图:
在这里插入图片描述
[Code]中的自定义界面创建就请参考CodeClasses.iss,这是innosetup自带的example脚本,附件里找到

2.自动指定上一次安装的路径

这个功能安装包脚本[setup]里已经有提供有这个属性。
UsePreviousAppDir = yes 时会自动跳过安装目录选择界面直接安装到上次安装的目录下
脚本是根据安装包的AppId这个属性来判断是不是跟上次安装的安装包相同.

3. 安装时控制安装的路径,但是显示上次安装的路径

这跟2有稍微的区别,就是能看到上次安装的目录在此基础上可以选择安装路径.
这里就能用到inno的[Code]段中的函数.如图:
在这里插入图片描述
DefaultDirName是指安装的默认路径
{code:GetPath|Client} 中code:GetPath 是[code]段中自己写的一个可以读注册表的函数,|Client是参数,如果没有参数就写成{code:GetPath}即可.
[Code]段中的函数可以出现在整个脚本的任何位置,不在[Code]段中时需要使用 {code:xxxx} 这种调用方式.需要注意的是[Code]段中的函数中的任何变量,必须是已经有值的变量才行,不然运行时会报错. 需要保证这些变量有值就需要在[Code]段中写下初始化的函数

function InitializeSetup(): Boolean;
在安装程序初始化时调用,返回 False 中断安装,否则返回 True。
procedure InitializeWizard();
在启动时使用该事件函数来改变向导或向导页面。你不能在它被触发时使用 InitializeSetup 事件函数,因为向导窗体尚不存在。
一般是用InitializeSetup函数就可以了.
Inno有内置的读取注册表的功能函数RegQueryStringValue,应用举例代码看

function GetPath(Param: String): String;
varstrPath: String;sFloader:String;sdefaultpath:String;
beginstrPath := '';sdefaultpath :='C:\Program Files\xxxxx';if Param = 'Client' thenbeginsFloader := 'Software\xxxxx';sdefaultpath := 'C:\Program Files\xxxxx';endif Param = 'Server' thenbeginsFloader := 'Software\xxxxx';sdefaultpath := 'C:\Program Files\xxxxx';endif (RegQueryStringValue(HKEY_LOCAL_MACHINE, sFloader, 'Path', strPath))thenbeginResult := strPath;endelsebeginResult :=sdefaultpath;end
end;

在这里插入图片描述
在这里插入图片描述

4.卸载完成后不残留文件

[UninstallDelete]
Name: {app}; Type: filesandordirs; Languages:
加上这段代码,表示卸载后删除文件和目录.可以在附件1中的ISetup.chm文档中搜索UninstallDelete来执行更多的删除操作,删除时能删除好多好多东西……

5.安装时运行批处理文件

安装时运行批处理文件,这样就能把windows中的批处理的强大功能导入到了安装卸载过程中,实现过安装时备份功能,安装时删除,安装时移动等等功能……
此功能是在[Code]段中实现的,因为[Code]段中的代码能在整个脚本中的任何位置执行.下面是批处理文件的参数,文件名,工作目录的写法:
ShellExec(‘’,ExpandConstant(sBatName), sBatParams,sBatPath, SW_HIDE, ewWaitUntilTerminated, ResultCode);
第一个参数: 这个不太懂,就写成空字符串就行了. 注:inno中字符串是单引号(‘’)来扩住的
第二个参数: ExpandConstant(sBatName)中ExpandConstant()是更改所有在sBatName中的常量到它们的值。例如,ExpandConstant(‘{pf}’)是改变到安装程序的文件名,简单来说就是更改inno中的常量(宏)的字符串让ShellExec这个函数认识这个参数. sBatName:=’xxxx.bat’这样就行了.
第三个参数: sBatParams:=’”’ + 参数 + ‘”’ . 其中”双引号是为了防止运行批处理时出现错误,单引号扩住双引号,我试过 sBatParams := ‘参数’ ,结果参数中包含空格,运行批处理时一直失败.
第四个参数: sBatPath 同理 跟第三个参数相同的思路.
第五个参数: SW_HIDE表示运行时隐藏cmd窗口, SW_SHOW表示运行时显示此窗口
第六个参数: ewNoWait, ewWaitUntilTerminated, ewWaitUntilIdle分别表示:不等待cmd执行完成,等待cmd执行完成,等待用户输入直到超时时间.
第七个参数: 这个参数是返回结果,结果为0除外的都是错误,具体错误原因可以查MSDN
例子.
文件备份举例.rar脚本可以完成的打出一个安装包,也包含很多其他的内容,所以打开安装包之后直接ctrl+f搜索 BackDir , BackFile即可快速找到函数.

6.安装包制作过程中怎么调试

Innosetup默认支持调试功能,跟vs2008编译器差不多,先打断点然后点击单步步入或单步步过,执行到断点之后点击F8就是继续,点击F7就是进入到函数里面继续,如图:
在这里插入图片描述

7.控制面板中安装包显示的名字

修改[Setup]段中
Uninstallable: yes表示有卸载程序,no表示没有
UninstallFilesDir: 表示卸载程序放置的路径
UninstallDisplayName: 表示卸载程序的显示名称

在这里插入图片描述

8.脚本中使用其他插件(.dll)的方法

举例使用IsTask.dll这个插件
在[Setup]段中写入
Source: compiler:IsTask.dll; Flags: dontcopy noencryption
Source: inno\IsTask.dll; DestDir: {app}\
其中DestDir:{app}\ 表示此插件安装后的 dll放置路径.

在[Code]段中任意位置,先导入函数
function KillTask(ExeFileName: string): Integer;
**external ‘KillTask@files:ISTask.dll stdcall delayload’; **

在[Code]段中使用函数,导入过程必须放在使用前面,不然识别函数失败
KillTask(‘tomcat7.exe’);

9.脚本太长时,include方式整理脚本

Include可以说是直接把这段代码复制到这个位置一样,可以把通常不用修改的内容卸载里面
Include可以用在整个脚本的任何位置.
在这里插入图片描述
比如这些也可以另外创建一个文件写进去然后在用include导入.
在这里插入图片描述

10.打包2G以上的文件

以下没验证过,从网上看到的.
加上这个代码可以打包50G的文件,但是打包后除了主程序,还会有多个bin附件文件

[Setup]
DiskSpanning = yes;
SlicePerDisk = 26;
DiskSliceSize= max;

总结(工具链接)

生活愉快 ~\(^o^)/~

inno setup 5 下载链接.


http://chatgpt.dhexx.cn/article/ubAswlbW.shtml

相关文章

FAQ式问答系统

FAQ式问答系统 最终效果系统架构项目描述一、意图识别1.fasttext介绍fasttext模型结构 2.数据格式3.Code 二、检索模型1.预处理2.构建hnsw图3.Learning To Rank(1)BM25BM25简单介绍: (2)深度匹配model 三、总结 最终效…

快速搭建一个基于知识图谱的智能问答系统

点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 作者:张墨一 知乎链接:https://zhuanlan.zhihu.com/p/58248608 本文仅作学术分享,若侵权&#…

自然语言处理之智能问答系统

目录 一、问答系统简介 二、搭建基于检索的问答系统 三、其他相似度计算 相关参考: 一、问答系统简介 问答系统通常分为任务型机器人、闲聊机器人和解决型机器人(客服机器人),三者的设计分别针对不同的应用场景。A&#xff0…

智能问答产品与技术

封面上放上凯的图片是因为,火影里面的凯有几个特点: 1、无忍术、血继界限、主角光环、显赫背景,完全靠自己努力修炼体术成为上忍 2、代表一种平凡的人做不平凡的事情的精神 3、对后辈也极其关注,所谓木叶飞舞之处 ,…

你知道该如何搭建 AI 智能问答系统吗?

作者 | 李秋键 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 今天我们将利用分词处理以及搜索引擎搭建一个智能问答系统,具体的效果如下所示: 下面简单了解下智能问答系统和自然语言处理的概念,智能问答系统是自然…

NLP: 基于文本语义的智能问答系统

向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号:datayx 问答系统是自然语言处理领域一个很经典的问题,它用于回答人们以自然语言形式提出的问题,有着广泛的应用。 经典应用场景包括:智…

浅谈基于知识图谱构建智能问答系统

“人才引进落户政策”“企业法人变更登记”“如何办理公积金贷款”……在智慧政务业务中,智能客服能够7*24小时响应群众、企业关于日常事务办理、民生政策、企业经营法规等咨询,大力提升了信息获取的便利性。 智能问答系统涉及自然语言处理、语音技术、…

从0到1构建一个基于知识图谱的智能问答系统

目录 一、前言二、知识图谱2.1 数据入库2.1.1 Nebula Graph搭建2.1.2数据导入 三、后端3.1 搭建Flask框架,处理http请求3.2 处理请求(核心)3.2.1 实体提取和意图分类建立AC树实体提取建立意图特征库意图模板匹配 3.2.2 转换成ngql语句 3.3 连接nebula查询结果返回 一…

智能问答系统产品设计详解

问答系统的概述 我想大家肯定看过很多关于自然语言处理(简称:NLP)技术方面的书籍或者论文,但在这里我不会详细叙述NLP技术方面的知识,而是想通过产品化思路结合NLP相关技术来搭建一个基础版的问答系统。本文通过基于问…

基于Bert的知识库智能问答系统

项目完整地址:https://github.com/1105425455/Bert/tree/master 有训练好的模型 可以先看一下Bert的介绍。 Bert简单介绍 一.系统流程介绍。 知识库是指存储大量有组织、有结构的知识和信息的仓库。这些知识和信息被存储为实体和实体关系的形式,通常用于…

智能问答系统实践——答案选择

问题描述 这个问题来自于SemEval-2015Task3: Answer Selection in Community Question Answering. 简单的说就是从一堆问题和答案中找出他们之间的相关性。 这个Task包含两个Subtasks: 1.给定一个问题和一些答案,将答案进行为3类:good/potential/bad。 2.给定一个判定问题…

构建一个完整的中文智能问答系统

向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程 公众号:datayx 简略概述要求: 构建一个完整的QA系统整个系统由三部分构成:前台,后台,知识库前台:请设计一个…

智能问答

问答系统是信息检索的一种高级形式,它能用准确、简洁的自然语言回答用户用自然语言提出的问题。其研究兴起的主要原因是人们对快速、准确地获取信息的需求。其中问答系统是目前人工智能和自然语 言处理领域中倍受关注并具有广泛发展前景的研究方向。不同类型的问答系…

智能答疑系统

问答系统是目前自然语言处理领域中的研宄热点,它既能让用户通过自然语言直接发问,又能直接向用户返回精确、简洁的答案,而不是一系列相关网页。 从算法与模型上来说,问答系统主要分成两个流派,一派是搜索式问答&#x…

人工智能AI系列 - 问答系统

目录: http://aias.top/ 问答系统 问答系统(Question Answering System, QA)是信息检索系统的一种高级形式,它能用准确、简洁的自然语言回答用户用自然语言提出的问题。其研究兴起的主要原因是人们对快速、准确地获取信息的需求。问答系统是人工智能和…

智能问答系统:问句预处理、检索和深度语义匹配技术

更多干货内容敬请关注「平安寿险PAI」(公众号ID:PAL-AI),文末有本期分享内容资料获取方式。 智能问答系统是人机交互的核心技术之一,常见的应用场景主要是智慧客服。通过构建该系统,机器人可以快速找到与用户问题相匹配的答案并自动回答,从而大大减少企业的人力成本;除…

自然语音处理(NLP)系列(五)——详解智能问答系统

为方便客户进行网上登记,提升各大官网系统的智能化水平,很多官网已上线“智能小客服”。“智能小客服”支持语音引导、机器人24小时智能问答、文字提问、上传图片咨询、关联问题推荐、远程人工客服等多种便利化的贴心咨询服务。这些服务中运用到了自然语…

FAQ智能问答系统设计与实现

一、项目介绍 FAQ(FAQ,frequently-asked questions)问答系统表示常见问题问答系统,常用于一些特定领域的智能客服,将用户经常问到的高频问答对索引起来,当新的提问命中时可以快速回答,准确而高…

react全家桶实战

整个目录结构如下: package.json代码如下: {"name": "active","version": "0.1.0","private": true,"dependencies": {"react": "^16.4.1","react-dom"…

React全家桶学习

来源:尚硅谷视频教程 - 张天禹 一、React简介 1 react特点 React:用于构建用户界面的javascript库。是一个将数据渲染为HTML视图的开源JavaScript库。 react的特点: 1.采用组件化模式、声明式编码,提高开发效率及组件复用率。…