Tauri Windows 打包指南:NSIS 与 WiX 详解
1. WiX(Windows Installer XML)
1.1 是什么
WiX 是微软官方的 Windows 安装包工具链,基于 MSI(Microsoft Installer) 格式生成 .msi 安装包。由微软开源维护,历史悠久,是企业级应用的主流选择。
1.2 生成产物
JahoZip_1.1.0_x64_en-US.msi
1.3 特点
| 特性 | 说明 |
|---|---|
| 格式 | .msi |
| 依赖 | 无额外运行时依赖,Windows 原生支持 |
| 安装体验 | 标准 Windows 安装向导 |
| 企业部署 | 支持 Group Policy、SCCM 等企业分发 |
| 卸载 | 完全由 Windows 系统管理,可从"添加/删除程序"卸载 |
| 网络下载 | Tauri 需要下载 WiX 工具链(约 35MB) |
1.4 Tauri 中的配置
// tauri.conf.json
{
"bundle": {
"targets": ["msi"]
}
}
2. NSIS(Nullsoft Scriptable Install System)
2.1 是什么
NSIS 是 Winamp 作者开发的开源安装包制作工具,生成 .exe 格式的自定义安装程序。功能强大灵活,是许多知名软件(如 VLC、7-Zip、Git for Windows)的安装包方案。
2.2 生成产物
JahoZip_1.1.0_x64-setup.exe
2.3 特点
| 特性 | 说明 |
|---|---|
| 格式 | .exe(自解压安装程序) |
| 安装体验 | 完全自定义的安装向导界面 |
| 体积 | 安装包体积比 MSI 更小 |
| 灵活性 | 支持脚本编程,可实现高度自定义 |
| 注册表 | 可精细控制注册表操作(右键菜单、文件关联等) |
| 网络下载 | Tauri 需要下载 NSIS 工具链 + 专用插件 |
2.4 Tauri 中的配置
// tauri.conf.json
{
"bundle": {
"targets": ["nsis"]
}
}
3. JahoZip 打包实践中遇到的问题
3.1 问题:NSIS 下载超时
现象:
Downloading https://github.com/tauri-apps/binary-releases/releases/download/nsis-3.11/nsis-3.11.zip
由于 GitHub 在国内访问不稳定,NSIS 工具链(约 2.3MB)和 Tauri 专用插件(nsis_tauri_utils.dll)下载经常超时失败。
解决方案:手动下载并部署
-
从 GitHub 手动下载:
nsis-3.11.zip→ binary-releasesnsis-tauri-utils-nsis_tauri_utils-v0.5.3.zip→ 同上
-
解压 NSIS 到指定目录:
Expand-Archive -Path "D:\download\nsis-3.11.zip" -DestinationPath "$env:LOCALAPPDATA\tauri\" -Force Rename-Item "$env:LOCALAPPDATA\tauri\nsis-3.11" "NSIS" -
复制 Tauri 专用插件 DLL:
Copy-Item -Path "D:\download\nsis_tauri_utils.dll" ` -Destination "$env:LOCALAPPDATA\tauri\NSIS\Plugins\x86-unicode\" -Force
3.2 问题:NSIS 目录被 Tauri 自动删除
现象: 手动部署 NSIS 后,下次构建时 Tauri 输出:
Warn NSIS directory is missing some files. Recreating it.
然后删除整个 NSIS 目录并尝试重新下载。
根本原因: Tauri 在构建前会严格校验 NSIS 目录的完整性。若目录结构不完整(如缺少某些子目录或文件),Tauri 会认为安装无效,直接删除重建。
解决方案:
方案 A(临时):确保 NSIS 目录完整,尤其是 nsis_tauri_utils.dll 必须在 x86-unicode 目录:
NSIS\
└── Plugins\
└── x86-unicode\
└── nsis_tauri_utils.dll ← 必须存在!
方案 B(推荐,跳过 NSIS):修改 tauri.conf.json 只构建 MSI:
{
"bundle": {
"targets": ["msi"]
}
}
3.3 问题:NSIS 插件必须放在 x86-unicode 目录
现象: 放在其他位置(如 x86-ansi)不生效,Tauri 仍然检测失败。
原因: Tauri 生成的 NSIS 安装脚本明确引用 x86-unicode 版本的插件,Unicode 支持是必须的。
正确路径:
%LOCALAPPDATA%\tauri\NSIS\Plugins\x86-unicode\nsis_tauri_utils.dll
4. 最终构建方案
JahoZip 同时构建两种安装包,配置如下:
// tauri.conf.json
{
"bundle": {
"targets": "all"
}
}
构建前准备脚本(每次构建前执行):
# 确保 nsis_tauri_utils.dll 在正确位置
Copy-Item -Path "D:\download\nsis_tauri_utils.dll" `
-Destination "$env:LOCALAPPDATA\tauri\NSIS\Plugins\x86-unicode\" -Force
# 开始构建
cd e:\my\rust\JahoZip
npm run tauri build
输出产物:
src-tauri/target/release/bundle/
├── msi/
│ └── JahoZip_1.1.0_x64_en-US.msi # WiX 生成,适合企业/系统管理员
└── nsis/
└── JahoZip_1.1.0_x64-setup.exe # NSIS 生成,适合普通用户分发
5. 选择建议
| 场景 | 推荐格式 |
|---|---|
| 普通用户下载安装 | .exe(NSIS) |
| 企业批量部署 | .msi(WiX) |
| 国内网络环境构建 | 优先构建 .msi,跳过 NSIS |
| 需要自定义安装流程 | .exe(NSIS 脚本更灵活) |