用一句话理解:Inno Setup 把你已经编译好的程序,打成 Windows 安装包(Setup.exe)。
它不负责编译代码,只负责安装、卸载、写快捷方式、选安装目录这些事。
适用:把 exe / dll / 配置 / 资源打成可分发安装程序。
不适合:macOS / Linux 安装包(那是别的工具的事)。
| 你有什么 | Inno Setup 帮你做什么 |
|---|---|
已编译的 MyApp.exe 和一堆依赖文件 |
打成一个 MyApp-Setup.exe |
| 希望用户双击安装 | 安装向导、选目录、开始菜单、桌面图标 |
| 希望能干净卸载 | 生成卸载程序,写注册表卸载项 |
📌 和 NSIS / WiX 的关系:都是 Windows 安装包工具。Inno Setup 脚本好读、上手快,个人项目和中小软件很常见。Tauri 默认常用 NSIS;如果你要自己控安装流程,Inno Setup 很合适。
装好后会有:
打包前,程序本身要先能跑:
另外准备:
.ico(安装包/快捷方式用).txt(可选)打开 Inno Setup Compiler → File → New
可走向导(Wizard),也可直接新建空 .iss 文件。
把下面脚本存成 MyApp.iss,路径按你的实际目录改:
Build → Compile(或快捷键)output\ 下得到:MyApp-Setup-1.0.0.exe| 段 | 作用 |
|---|---|
#define |
宏变量,版本号、名字写一处,处处用 |
[Setup] |
安装包核心配置:目录、输出名、压缩、权限 |
[Languages] |
安装向导语言 |
[Tasks] |
可选任务,如桌面图标 |
[Files] |
最重要:哪些文件装到哪里 |
[Icons] |
开始菜单 / 桌面快捷方式 |
[Run] |
安装完成后运行什么 |
[Code] |
Pascal 脚本,做自定义逻辑(进阶) |
[Registry] |
写注册表(进阶,能不用就少用) |
| 常量 | 含义 |
|---|---|
{app} |
用户选的安装目录 |
{autopf} |
自动选的 Program Files(32/64 会处理) |
{userappdata} |
当前用户 AppData\Roaming |
{localappdata} |
当前用户 AppData\Local |
{tmp} |
临时目录 |
{group} |
开始菜单程序组 |
{autodesktop} |
桌面(自动区分) |
[Files] 常用 Flags| Flag | 含义 |
|---|---|
ignoreversion |
不比较版本,直接覆盖(开发期常用) |
recursesubdirs |
包含子目录 |
createallsubdirs |
空目录也创建 |
onlyifdoesntexist |
已存在则不覆盖(适合用户配置) |
uninsneveruninstall |
卸载时保留(日志/用户数据要谨慎) |
示例:程序文件可覆盖,用户配置不覆盖:
生成 GUID 可用 PowerShell:
只给 64 位系统装时加上 ArchitecturesAllowed,避免装到不支持的机器上。
| 场景 | 建议 |
|---|---|
装到 Program Files |
PrivilegesRequired=admin |
| 只装当前用户目录 | PrivilegesRequired=lowest,目录用 {localappdata}\... |
绿色软件、不想弹 UAC,优先 per-user 安装。
建议和程序内版本一致,方便排查用户装的是哪一版。
若程序依赖 VC++ 运行库、.NET 等:
VC++ 示例思路(需自备安装包路径):
语言文件一般在 Inno 安装目录的 Languages\ChineseSimplified.isl。
若编译报找不到语言文件:
Default.isl(英文向导)| 参数 | 含义 |
|---|---|
/SILENT |
静默,进度窗可能还在 |
/VERYSILENT |
更静默 |
/DIR=路径 |
指定安装目录 |
/NORESTART |
尽量不重启 |
脚本里:
Inno 安装后一般有 ISCC.exe:
成功会在 OutputDir 生成安装包。
可把这行写进 build-installer.ps1,和编译步骤串起来。
未签名的 Setup.exe 容易被 SmartScreen 拦截。
signtool 签 安装包(以及主程序 exe 更好)具体证书与时间戳服务器以你购买的证书厂商为准。
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 编译失败找不到文件 | Source 路径不对 |
用相对 .iss 的路径,或写绝对路径试一次 |
| 安装后双击没反应 | 少 dll / 运行库 | 在干净虚拟机里测;用依赖工具查缺什么 |
| 卸载后还有文件 | 运行中锁定,或 Flags 保留 | 退出程序再卸;检查 uninsneveruninstall |
| 升级没覆盖旧文件 | 版本比较逻辑 | 开发期可用 ignoreversion |
| 杀软误报 | 未签名 + 压缩壳特征 | 签名;减少无意义加壳;提交白名单 |
| 中文乱码 | 脚本编码问题 | .iss 用 UTF-8 BOM(Inno 6 常用) |
| 方案 | 说明 |
|---|---|
| Tauri 自带 NSIS | too-box-new 当前打包路线,和自动更新集成方便 |
| 自己上 Inno Setup | 安装向导自定义多、老项目常见、脚本直观 |
| 可以并存 | 例如内部渠道用 Inno,正式桌面端继续 Tauri NSIS |
选工具的核心不是“哪个更高级”,而是:安装体验、签名、自动更新、团队是否熟。
只有一个绿色 exe 时:
装到用户目录、不弹管理员 UAC,适合小工具。
写给需要快速打 Windows 安装包的同事:先保证 release 能跑,再写 [Files],最后才考虑签名和静默参数。