【保姆级喂饭教程】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 Setupcsdn下载链接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默认会打开软件打开软件如下取消就好二、添加中文语言包为了使用方便下载个汉化包在之前的下载窗口点击TranslationsInno Setup语言包https://jrsoftware.org/files/istrans/往下在非官方中会找到简体中文语言包点击作者名称会得到一个邮箱发送邮件自动回复GitHub地址大家可以直接点进去下载https://github.com/kira-96/Inno-Setup-Chinese-Simplified-Translation点击右边的版本号会直接打开汉化文本可以复制到txt中然后改名为ChineseSimplified.isl这里提供一个文本和汉化包链接文本Inno Setup 简体中文语言包文本 6.5.0csdn下载链接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 FilesApplication 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#defineMyAppVersion1.0.0.0#endif#defineMyAppName测试#defineMyAppEngNameTest#defineMyAppURLhttps://test.com/#defineMyAppExeNameMyAppName_MyAppVersion.exe2. 移动Inno Setup脚本文件既然是自动化了就是只为这一个项目服务的打包脚本当然需要移动到项目里来在Inno Setup中把脚本另存为到项目根目录下文件格式为.iss3. 修改生成后事件脚本在最后面加上调用 Inno Setup 自动打包Inno Setup 编译器路径换成自己的安装位置。::调用 Inno Setup 自动打包:: Inno Setup 编译器路径setinnoSetupPathD:\Program\Work\Inno Setup 6\ISCC.exe:: Inno Setup 脚本文件路径setissFile$(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实现自动更新时必须用英文可以用英文应用名作为输出文件名不会影响我们的生成应用exeOutputBaseFilename{#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。Compressionlzma压缩等级可以填写以下值从低到高如下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 */