Tauri Windows 打包指南:NSIS 与 WiX 详解

0 阅读2分钟

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)下载经常超时失败。

解决方案:手动下载并部署

  1. 从 GitHub 手动下载:

    • nsis-3.11.zipbinary-releases
    • nsis-tauri-utils-nsis_tauri_utils-v0.5.3.zip → 同上
  2. 解压 NSIS 到指定目录:

    Expand-Archive -Path "D:\download\nsis-3.11.zip" -DestinationPath "$env:LOCALAPPDATA\tauri\" -Force
    Rename-Item "$env:LOCALAPPDATA\tauri\nsis-3.11" "NSIS"
    
  3. 复制 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 脚本更灵活)