【保姆级喂饭教程】Inno Setup下载安装、添加中文、打包、自动化教程

目录

  • 前言
  • [一、下载安装Inno Setup](#一、下载安装Inno Setup)
  • 二、添加中文语言包
  • 三、打包应用
  • 四、测试
  • 五、自动化构建
    • [1. 获取版本号](#1. 获取版本号)
    • [2. 移动Inno Setup脚本文件](#2. 移动Inno Setup脚本文件)
    • [3. 修改生成后事件脚本](#3. 修改生成后事件脚本)
    • [4. 测试](#4. 测试)
  • 六、优化
    • [1. 打包名称](#1. 打包名称)
    • [2. 默认添加快捷方式](#2. 默认添加快捷方式)
    • [3. 悬停版本号](#3. 悬停版本号)
    • [4. 卸载程序](#4. 卸载程序)
    • [5. 自定义安装包压缩等级](#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脚本中

在脚本开头添加一个变量用于接收命令行参数,头部配置示例如下:

c 复制代码
; 如果未通过命令行传递版本号,则使用默认值
#ifndef MyAppVersion
  #define MyAppVersion "1.0.0.0"
#endif

#define MyAppName "测试"
#define MyAppEngName "Test"
#define MyAppURL "https://test.com/"
#define MyAppExeName MyAppName + "_" + MyAppVersion + ".exe"

2. 移动Inno Setup脚本文件

既然是自动化了,就是只为这一个项目服务的打包脚本,当然需要移动到项目里来

在Inno Setup中把脚本另存为到项目根目录下,文件格式为.iss

3. 修改生成后事件脚本

在最后面加上调用 Inno Setup 自动打包,Inno Setup 编译器路径换成自己的安装位置。

bash 复制代码
:: ===================== 调用 Inno Setup 自动打包 =====================
:: Inno Setup 编译器路径
set "innoSetupPath=D:\Program\Work\Inno Setup 6\ISCC.exe"
:: Inno Setup 脚本文件路径
set "issFile=$(ProjectDir)inno setup.iss"

:: 检查编译器是否存在
if exist "%innoSetupPath%" (
    echo 正在使用 Inno Setup 打包安装程序...
    :: 传递当前版本号到 Inno Setup 脚本(脚本中需定义 #ifndef MyAppVersion)
    "%innoSetupPath%" "%issFile%" /DMyAppVersion=!version!
    if errorlevel 1 (
        echo Inno Setup 打包失败,请检查脚本。
        exit /b 1
    )
) else (
    echo 错误:未找到 Inno Setup 编译器,请确认路径正确。
    exit /b 1
)

为防止影响调试,可以加个判断,只有Release模式编译项目才会进行打包。加到最前面的声明后面即可。

示例代码如下:

bash 复制代码
:: ==================== 仅 Release 模式执行 ====================
if /I not "$(ConfigurationName)"=="Release" (
    echo 当前为非 Release 模式,跳过版本递增与打包。
    exit /b 0
)

4. 测试

检查是否在release模式

点击生成-生成解决方案

查看日志

六、优化

1. 打包名称

打包后的应用名称最好是用英文,否则部分系统特殊情况可能会出错,使用AutoUpdater.NET实现自动更新时必须用英文

可以用英文应用名作为输出文件名,不会影响我们的生成应用exe

bash 复制代码
OutputBaseFilename={#MyAppEngName}_{#MyAppVersion}

2. 默认添加快捷方式

安装完之后发现桌面没有快捷方式,需要删除[Tasks]中Name为 desktopicon 这一行最后的 ; Flags: unchecked

删除后的代码如下

bash 复制代码
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"

3. 悬停版本号

设置鼠标悬停在安装包上显示的版本号,在[Setup]中添加如下行

bash 复制代码
VersionInfoVersion={#MyAppVersion}

4. 卸载程序

Inno Setup自带卸载程序,前面第四部分测试已经测试过

5. 自定义安装包压缩等级

Setup区块的Compression表示生成安装包时的压缩等级,默认没有,默认值是lzma。

bash 复制代码
Compression=lzma

压缩等级可以填写以下值,从低到高如下

txt 复制代码
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~

txt 复制代码
/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            佛祖保佑       永无BUG
*/
相关推荐
蜗牛~turbo1 小时前
金蝶云星空 二开得到来源单单据体2数据包
windows·c#·金蝶·dynamicobject
雪豹阿伟2 小时前
14.C# —— 静态成员、只读常量、继承、访问修饰符、多态、抽象类
c#·上位机
武子康2 小时前
Build-Your-Own-X 从零构建轻量级事件驱动微框架:嵌入式与物联网场景下的极简实践
人工智能·后端·物联网·ai·c#·大模型·嵌入式
xiaoshuaishuai817 小时前
C# AvaloniaUI 资源找不到报错
java·服务器·前端·windows·c#
Xin_ye1008617 小时前
C# 零基础到精通教程 - 第十八章:部署与发布——让应用上线
开发语言·c#
爱讲故事的18 小时前
操作系统第一讲复习:为什么学习操作系统,以及操作系统到底在做什么?
linux·开发语言·windows·学习·ubuntu·c#
JaydenAI19 小时前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
z落落21 小时前
C# 继承:父子构造函数 + base 关键字 +五大访问修饰符(同项目+跨项目 全覆盖)
开发语言·c#