乘风破浪,遇见最美Windows 11之现代Windows桌面应用开发 - Inno Setup如何设置退出代码
什么是Inno Setup
https://jrsoftware.org
https://github.com/jrsoftware/issrc
Inno Setup是由Jordan Russell和Martijn Laan开发的一个免费的Windows程序安装程序。Inno Setup于1997年首次推出,如今在功能设置和稳定性方面可以与许多商业安装程序相媲美,甚至超越。
主要特点
- 支持2006年以来的每个Windows版本,包括。Windows 11、Windows 10、Windows 10 on ARM、Windows Server 2019、Windows Server 2016、Windows 8.1、Windows 8、Windows Server 2012、Windows 7、Windows Server 2008 R2、Windows Server 2008和Windows Vista。(不需要服务包)。
- 广泛支持在64位版本的Windows上安装64位应用程序。x64、ARM64和Itanium架构都被支持。
- 广泛支持管理和非管理安装的安装。
- 支持创建一个单一的EXE来安装你的程序,以方便在线分发。也支持磁盘跨度。
- 可调整的标准Windows向导界面。
- 可定制的安装类型,例如:完整、最小、自定义。
- 完整的卸载功能。
- 文件的安装。
- 包括对"deflate"、bzip2和7-Zip LZMA/LZMA2文件压缩的综合支持。安装程序具有比较文件版本信息、替换使用中的文件、使用共享文件计数、注册DLL/OCX的和类型库以及安装字体的能力。
- 在任何地方创建快捷方式,包括在开始菜单和桌面上。
- 创建注册表和.INI条目。
- 在安装之前、期间或之后运行其他程序。
- 支持多语言安装,包括从右到左的语言支持。
- 支持受密码保护和加密的安装。
- 支持数字签名的安装和卸载,包括双签名(SHA1&SHA256)。
- 无声安装和无声卸载。
- Unicode安装。
- 集成预处理器选项,用于高级编译时定制。
- 集成Pascal脚本引擎选项,用于高级运行时的安装和卸载定制。
- 完整的源代码可从GitHub获得。
- 占用空间小:在包含所有功能的情况下,只有大约1.5MB的开销。
- 所有的功能都有完整的文档。
- 被微软Visual Studio Code和Embarcardero Delphi使用。
它真的是免费的吗,甚至用于商业用途?
是的,它可以完全免费使用,即使是在部署商业应用程序时。
(注意:"Completely free of charge"不能与"completely free"相混淆。Inno Setup是有版权的软件,不是公共领域的软件。在分发和使用上有一些限制;详情请见LICENSE.TXT文件)。
创建安装程序
安装是通过脚本来创建的,它是ASCII或Unicode(UTF-8编码的BOM)文本文件,格式有点类似于.INI文件。(不,它并不像你想象的那么复杂!)。
脚本的扩展名是".iss"(指Inno Setup Script)。脚本控制安装的每一个方面。它指定了哪些文件要被安装,安装在哪里,要创建哪些快捷方式,以及它们的名称,等等。
脚本文件通常在 "Inno Setup Compiler "编译器IDE程序中编辑。完成脚本的编写后,下一步也是最后一步就是在编译器集成开发环境中选择 "编译"。这样做的目的是根据您的脚本创建一个完整的、可随时运行的设置程序。默认情况下,这个程序是在包含脚本的目录下一个名为 "输出 "的目录中创建的。
为了让你了解这一切是如何进行的,启动编译器集成开发环境,单击 "文件|打开",然后选择位于Inno Setup目录下的Examples子目录中的一个脚本文件。(将示例脚本作为你自己脚本的模板可能会有帮助)。
脚本格式概述
Inno设置脚本被安排成几个部分。每个部分控制安装的不同方面。通过指定用方括号[]括起来的章节名称来启动一个章节。每个部分都有任意数量的条目。
主要有两种类型的部分:如[Setup],其条目包含指令名称和值(形式为指令=值);如[Files],其条目被划分为参数。
下面是一个例子:
[Setup]
AppName=My Program
[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
注意,指定同名的多个部分是合法的。
你可以在脚本中加入 "注释"(编译器会忽略这些注释),方法是在每一行的开头加上一个分号。比如说
; This is a comment. I could put reminders to myself here...
支持类似于C语言的#include指令,它可以从一个单独的文件中拉入#include指令位置的脚本中的行。其语法是
#include "filename.txt"
如果文件名不是完全合格的,编译器将在包含#include指令的文件的同一目录下寻找它。文件名可以以 "compiler: "为前缀,在这种情况下,它将在编译器目录下寻找该文件。
支持#preproc指令,它指定是使用只支持上述#include指令的内置预处理器,还是使用支持更多指令的Inno Setup Preprocessor(ISPP)。语法是:。
#preproc builtin
#preproc ispp
默认情况下,脚本使用ISPP(如果有的话),而.isl文件使用内置的预处理器。
如果使用Unicode文件,它必须是用BOM编码的UTF-8编码。
设置退出代码
https://documentation.help/Inno-Setup/topic_setupexitcodes.htm
从Inno Setup 3.0.3开始,设置程序可能会返回下列退出代码之一。
退出代码 | 场景说明 |
---|---|
0 |
设置成功运行至完成,或者使用了/HELP 或/? 命令行参数。 |
1 |
安装时初始化失败 |
2 |
用户在实际安装开始前点击了向导中的"取消",或者在打开的"这将安装..."信息框中选择了"否"。 |
3 |
在准备进入下一个安装阶段时发生了致命的错误(例如,从显示预安装向导页面到实际安装过程)。除非在最不寻常的情况下,例如内存或Windows资源耗尽,否则这种情况不应该发生。 |
4 |
在实际安装过程中发生了一个致命的错误。注意:导致显示Abort-Retry-Ignore框的错误不是致命的错误。如果用户在这样的信息框中选择了中止,将返回退出代码5。 |
5 |
用户在实际安装过程中点击了"取消",或者在"中止-重试-忽略"框中选择了"中止"。 |
6 |
安装过程被调试器强行终止(在IDE中使用了"运行 |
7 |
准备安装阶段确定Setup不能继续安装。(在Inno Setup 5.4.1中首次介绍) |
8 |
准备安装阶段确定Setup不能继续安装,需要重新启动系统以纠正这个问题。(首次在Inno Setup 5.4.1中介绍) |
参考
- What is Inno Setup?
- Setup Exit Codes