【保姆级喂饭教程】Inno Setup下载安装、添加中文、打包、自动化教程
目录
- 前言
- 一、下载安装Inno Setup
- 二、添加中文语言包
- 三、打包应用
- 四、测试
- 五、自动化构建
- 1. 获取版本号
- 2. 移动Inno Setup脚本文件
- 3. 修改生成后事件脚本
- 4. 测试
- 六、优化
- 1. 打包名称
- 2. 默认添加快捷方式
- 3. 悬停版本号
- 4. 卸载程序
- 5. 自定义安装包压缩等级
- 后记
- 参考文献
前言
之前需要开发一个小工具,虽然大部分功能都已经实现,但由于要推广用户,为了防止用户一不小心删除可行性文件,决定将工具打包为安装包。
【AI总结】WinForms应用打包发布完全指南:从官方方案到第三方工具,一网打尽
【AI总结】【技术选型】 .NET Framework 打包指南:5种主流免费单EXE安装方案对比与推荐
最终选型为通过Inno Setup方式打包
一、下载安装Inno Setup
csdn下载链接:innosetup-6.7.1+简体中文
Inno Setup官网:https://jrsoftware.org/isdl.php
打开官网进行下载,目前最新是6.7.1,下面还有预览版的7.0,大家以后可以尝试
以前还好奇有些软件怎么都是这个图标,现在才知道他们都是inno setup打包的,双击打开
选择安装给所有用户
没有中文,默认英文,点击ok
点击同意,next
修改安装位置,点击next
默认创建开始菜单,不用管,next
把桌面快捷方式勾上,第二个是关联.iss格式文件,next
点击install
安装完成后点击finish,由于上面勾选了launch inno setup,默认会打开软件
打开软件如下,取消就好
二、添加中文语言包
为了使用方便,下载个汉化包,在之前的下载窗口点击Translations
Inno Setup语言包:https://jrsoftware.org/files/istrans/
往下在非官方中会找到简体中文语言包
点击作者名称会得到一个邮箱,发送邮件自动回复GitHub地址,大家可以直接点进去下载
https://github.com/kira-96/Inno-Setup-Chinese-Simplified-Translation
点击右边的版本号会直接打开汉化文本,可以复制到txt中然后改名为ChineseSimplified.isl,这里提供一个文本和汉化包链接
文本:Inno Setup 简体中文语言包文本 6.5.0+
csdn下载链接:Inno Setup 简体中文 6.5.0+
打开之前的安装目录下面的Languages文件夹,把下载到的语言包复制进去
三、打包应用
接下来开始演示一下打包应用程序,双击我们的Inno Setup图标
选择使用脚本引导创建一个脚本,
上面的选项是创建一个空脚本文件,自己写代码,适合熟练以后,
下面是选择之前的脚本文件,可以看到Inno Setup内置了一些示例脚本
如果不小心点了取消也没事,点击工具栏图标也可以,或者菜单栏File-New
点击next
填写应用程序的基础信息,分别是
- Application name:应用名称(必填)
- Application Version:应用版本号(必填)
- Application publisher:应用发布者,可以填公司或组织名称(选填)
- Application website:应用网址,可以填应用首页/下载页或者公司网址(选填)
这一步设置安装目录
- Application destination base folder:默认安装目录为Program Files
- Application folder name:应用文件夹名称,默认和之前的应用名称一样,不管名称中文英文,文件夹名称都推荐改成英文,避免一些兼容性的异常错误
- Allow user to change the application folder:允许用户修改安装目录,默认允许
- The application doesn’t need a folder:这个应用不需要文件夹,意思就是单文件应用,选了这个以后上面的设置就都失效了,一般别选
展示一下自定义安装路径,选择Custom后,第二行就可以填写路径了,等熟练以后或者有特殊需要再设置
接下来配置打包文件
- Application main executable file:主exe文件,我们的应用入口,也就是之前在vs中生成的debug或者release下面的exe,正式肯定是使用release下面的
- Allow user to start the application after Setup has finished:就是安装完后的那个启动程序选项
- The application doesn’t have a main executable file:该应用没有主执行文件,一般用不到
- Other application fles:一般来说我们生成后release里面还会生成一些配置文件或者dll(使用costura.fody可打包为一个exe),如果应用大一些还会有各种素材、配置、数据等文件,这些不会放到主exe里面,但是也需要打包
- Add file(s):添加单个文件
- Add folder:添加文件夹
这里提醒一下,添加文件夹后需要选择是,会把子文件夹一起打包进去
设置关联文件,一般都没有,取消即可,下面两个空分别是文件类型名称和后缀名称
这里分别是设置开始菜单快捷方式和桌面快捷方式。开始菜单快捷方式默认是创建一个应用程序名称的文件夹,取消勾选后可以详细设置。
- Allow user to change the Start Menu folder name:允许用户改变开始菜单文件夹名
- Allow user to disable Start Menu folder creation:允许用户不创建开始菜单快捷方式
- Create an Internet shortcut in the Start Menu folder:创建一个网页快捷方式在文件夹
- Create an Uninstall shortcut in the Start Menu folder:创建卸载程序的快捷方式在文件夹
设置应用文档,暂且用不上
- License file:许可证文件
- Information file shown before installation:安装前显示的信息文件
- Information file shown after installation:安装后显示的信息文件
设置安装模式,默认为管理员安装
- Administrative install mode (install for all users):管理安装模式(为所有用户安装)
- Non administrative install mode (install for current user only):非管理安装模式(仅限当前用户安装)
- Allow user to override the install mode via the command line:允许用户通过命令行覆盖安装模式
- Ask the user to choose the install mode at startup:在启动时询问用户选择安装模式
配置注册表,通过导入reg配置文件的方式,由于注册表可以在应用中设置,感觉这里没必要
下面的卸载时的设置可以根据需要调整,也可以在应用内处理
- Delete keys which are empty on uninstall:卸载时删除空密钥
- Also delete keys which are not empty:同时删除非空密钥
- Delete values on uninstall:卸载时删除值
- Create only if Windows’ version is at least:仅当Windows版本至少为时创建
设置安装引导语言,由于我们之前添加了中文语言包,这里把它勾上,next
终于到编译设置了
- Custom compiler output folder:编译输出路径,推荐设置一个专门的输出路径,方便查看
- Compiler output base file name:编译后安装包的文件名称
- Custom Setup icon file:编译后安装包的图标,选择之前vs中使用的
- Setup password:设置密码,没见过安装软件需要密码的
设置安装引导界面风格,切换了一下除了黑色模式其他都差别不大, 默认吧
默认使用#define compler指令来简化脚本,这样以后手动更改脚本容易些。
Finish~ over~
完成后可以看到脚本代码已经生成了,提示我们可以现在编译,点击是
编译之前提示我们保存脚本,保存到之前设置的输出路径里面
编译成功
输出文件夹如下
四、测试
简单测试下我们的安装包,双击打开
默认是中文,还可以
选择安装位置
桌面快捷方式没有默认勾选
安装
运行程序默认勾选
开始菜单效果
安装文件夹
测试下卸载,右键应用
跳转到这里了,还得右键
确认一下
卸载完成,看来后续还得完善一下卸载部分
注意:只有第一次安装可以修改目录,后续再次安装时就没有修改目录了,可以卸载后再次安装。
五、自动化构建
应用开发初期版本更新可能会很频繁,每次在vs中生成后再到Inno Setup中打包还是有点麻烦,好在我们可以把这个过程变成自动化的。
核心有两点,让Inno Setup脚本自动找到应用exe,让vs生成后自动调用脚本
1. 获取版本号
正常来说,vs生成后的正式exe就在release文件夹里,一般不做修改
如果是团队开发,可以考虑把Inno Setup脚本中的绝对路径换成相对路径,我这里不做修改
我之前添加了生成后事件脚本,用于生成带自增版本号的exe
【手把手实战教学】基于C#和.NET Framework的WinForms开发教程系列(5)版本自增
所以exe路径需要拼接版本号,同样打包后的文件也需要版本号,就要把版本号传递到Inno Setup脚本中
在脚本开头添加一个变量用于接收命令行参数,头部配置示例如下:
;如果未通过命令行传递版本号,则使用默认值#ifndefMyAppVersion#defineMyAppVersion"1.0.0.0"#endif#defineMyAppName"测试"#defineMyAppEngName"Test"#defineMyAppURL"https://test.com/"#defineMyAppExeNameMyAppName+"_"+MyAppVersion+".exe"2. 移动Inno Setup脚本文件
既然是自动化了,就是只为这一个项目服务的打包脚本,当然需要移动到项目里来
在Inno Setup中把脚本另存为到项目根目录下,文件格式为.iss
3. 修改生成后事件脚本
在最后面加上调用 Inno Setup 自动打包,Inno Setup 编译器路径换成自己的安装位置。
::=====================调用 Inno Setup 自动打包=====================:: Inno Setup 编译器路径set"innoSetupPath=D:\Program\Work\Inno Setup 6\ISCC.exe":: Inno Setup 脚本文件路径set"issFile=$(ProjectDir)inno setup.iss":: 检查编译器是否存在ifexist"%innoSetupPath%"(echo正在使用 Inno Setup 打包安装程序... :: 传递当前版本号到 Inno Setup 脚本(脚本中需定义#ifndef MyAppVersion)"%innoSetupPath%""%issFile%"/DMyAppVersion=!version!iferrorlevel1(echoInno Setup 打包失败,请检查脚本。exit/b1))else(echo错误:未找到 Inno Setup 编译器,请确认路径正确。exit/b1)为防止影响调试,可以加个判断,只有Release模式编译项目才会进行打包。加到最前面的声明后面即可。
示例代码如下:
::====================仅 Release 模式执行====================if/I not"$(ConfigurationName)"=="Release"(echo当前为非 Release 模式,跳过版本递增与打包。exit/b0)4. 测试
检查是否在release模式
点击生成-生成解决方案
查看日志
六、优化
1. 打包名称
打包后的应用名称最好是用英文,否则部分系统特殊情况可能会出错,使用AutoUpdater.NET实现自动更新时必须用英文
可以用英文应用名作为输出文件名,不会影响我们的生成应用exe
OutputBaseFilename={#MyAppEngName}_{#MyAppVersion}2. 默认添加快捷方式
安装完之后发现桌面没有快捷方式,需要删除[Tasks]中Name为desktopicon这一行最后的; Flags: unchecked
删除后的代码如下
Name:"desktopicon";Description:"{cm:CreateDesktopIcon}";GroupDescription:"{cm:AdditionalIcons}"3. 悬停版本号
设置鼠标悬停在安装包上显示的版本号,在[Setup]中添加如下行
VersionInfoVersion={#MyAppVersion}4. 卸载程序
Inno Setup自带卸载程序,前面第四部分测试已经测试过
5. 自定义安装包压缩等级
[Setup]区块的Compression表示生成安装包时的压缩等级,默认没有,默认值是lzma。
Compression=lzma压缩等级可以填写以下值,从低到高如下
none(不压缩) zip zip/1到zip/9 bzip bzip/1到bzip/9 1zma 1zma/fast 1zma/normal 1zma/max 1zma/ultra 1zma/ultra64 1zma2 1zma2/fast 1zma2/ normal 1zma2/max 1zma2/ultra 1zma2/ultra64压缩等级越高,生成的安装包越小,不过打包/安装时消耗的CPU和内存 也越高,大家根据实际情况选择。
后记
如果有更复杂的功能可以在最后面增加一个
[Code]区块,在下面编写各种函数代码,比如安装前关闭进程,清除旧版本文件。
安装流程的各个步骤触发 Inno Setup 的内置回调函数CurStepChanged。
等等
参考文献
InnoSetup使用指南
Inno Setup安装包制作教程(exe打包)
利用Inno Setup在VS编译时自动构建安装包
喜欢的点个关注吧><!祝你永无bug~
/* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\||| : |||// \ / _||||| -:- |||||- \ | | \\\ - /// | | | \_| ''\---/'' | | \ .-\__ `-` ___/-. / ___`. .' /--.--\ `. . __ ."" '< `.___\_<|>_/___.' >'"". | | : `- \`.;`\ _ /`;.`/ - ` : | | \ \ `-. \_ __\ /__ _/ .-` / / ======`-.____`-.___\_____/___.-`____.-'====== `=---=' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 永无BUG */