解决 Windows Tauri 构建时 WiX 等打包文件下载失败问题详解#
在使用 Tauri 进行 Windows 应用构建时,经常会遇到 WiX、NSIS 等必需的打包工具及插件下载失败,导致构建过程超时或失败的情况。尤其是在有全局翻墙需求的环境中更为常见。本文总结了手动下载和配置这些依赖的方法,并附上实验验证的操作步骤,帮助大家顺利完成构建。
1. 问题背景与目录结构要求#
当构建 Windows Tauri 应用时,如果网络环境导致依赖文件无法自动下载,构建过程会报错、超时或者失败。针对常见的依赖包:
wix311-binaries.zip
(WiX 工具集)nsis-3.zip
(NSIS 安装包工具)- NSIS 插件
ApplicationID.dll
、nsis_tauri_utils.dll
需要手动下载并放置在特定目录,且目录名和文件路径大小写需严格匹配,否则会导致后续构建检测失败。
2. 手动下载及部署步骤#
2.1 WiX工具包#
注意: 如果你下载的是 WiX 3.14 版本,相应文件夹需命名为 WixTools314
,经实测该名称可行。
2.2 NSIS 安装工具#
2.3 NSIS 插件文件#
NSIS 目录中的插件文件夹缺少两个关键插件文件,需单独下载:
解压 NSIS-ApplicationID.zip
后,将内容复制到:
1
| C:\Users\你的用户名\AppData\Local\tauri\NSIS\Plugins\x86-unicode\
|
同时,将下载的 nsis_tauri_utils.dll
文件也放入上述路径。
3. 目录整体结构示例#
以 C:\Users\用户名\AppData\Local\tauri\
目录为例,整体文件夹应如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| tauri
├─WixTools
│ └─(WiX工具包解压文件)
│
└─NSIS
├─Bin
├─Contrib
├─Docs
├─Examples
├─Include
├─Plugins
│ ├─x86-ansi
│ └─x86-unicode
│ ├─ApplicationID.dll
│ └─nsis_tauri_utils.dll
└─Stubs
|
4. 原理及源码参考#
Tauri 在构建过程中,会检测上述工具和插件文件是否存在。
主要源码检查位置:
关键点: 如果程序发现必需文件不存在(包括插件文件),就会删除对应文件夹并尝试重新下载,导致下载失败且构建中断。
5. 总结#
遇到 Windows 平台上 Tauri 构建时,因为网络问题导致自动下载 WiX 或 NSIS 失败时,可采用本文中的手动下载方案,将压缩包解压到指定路径,确保目录和文件结构完整无误。尤其要注意 NSIS 文件夹下缺失的插件文件,需单独手动下载并放置。
只要按照上述步骤操作,基本可以解决绝大多数 Tauri Windows 构建中打包文件下载失败的问题,保证构建流程顺畅。
参考资料#
如何解决安装失败
解决windows Tauri 构建时下载 WiX等其它打包文件失败
附录 PowerShell 脚本#
环境验证通过 ✅
Tauri v2.4.1
| WixTools 3.14
| NSIS 3
| nsis_tauri_utils v0.4.2
使用说明:
- 保存为
.ps1
脚本执行 - 自动清理旧数据 → 请提前备份
- 临时目录
temp
自动创建/删除
若打包失败:
👉 检查下载版本是否匹配日志中的需求版本
👉 修改脚本中的下载链接即可
以下是脚本内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
| # 1. 删除之前的临时目录和目标目录,保证干净环境
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue temp
$tauriDir = Join-Path $env:USERPROFILE "AppData\Local\tauri"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue (Join-Path $tauriDir "NSIS")
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue (Join-Path $tauriDir "WixTools314")
# 2. 创建临时目录
if (!(Test-Path temp)) { mkdir temp }
cd temp
# 3. 下载 wix 工具(WixTools314)
Invoke-WebRequest -Uri "https://github.com/wixtoolset/wix3/releases/download/wix3141rtm/wix314-binaries.zip" -OutFile "wix314-binaries.zip"
Expand-Archive ./wix314-binaries.zip -DestinationPath ./WixTools314
# 4. 下载 NSIS
Invoke-WebRequest -Uri "https://github.com/tauri-apps/binary-releases/releases/download/nsis-3/nsis-3.zip" -OutFile "nsis-3.zip"
Expand-Archive ./nsis-3.zip -DestinationPath ./NSIS
# 5. 移动 NSIS 文件夹下的 nsis-3.* 子目录内容到 NSIS 根目录
$nsisSubDir = Get-ChildItem .\NSIS | Where-Object { $_.PSIsContainer -and $_.Name -like 'nsis-3.*' } | Select-Object -First 1
if ($nsisSubDir) {
Move-Item -Path (Join-Path $nsisSubDir.FullName '*') -Destination .\NSIS -Force
Remove-Item $nsisSubDir.FullName -Recurse -Force
}
# 6. 下载 NSIS-ApplicationID 插件并解压
Invoke-WebRequest -Uri "https://github.com/tauri-apps/binary-releases/releases/download/nsis-plugins-v0/NSIS-ApplicationID.zip" -OutFile "NSIS-ApplicationID.zip"
Expand-Archive .\NSIS-ApplicationID.zip -DestinationPath .\NSIS-ApplicationID
# 7. 移动插件文件到 NSIS\Plugins\x86-unicode
$pluginDir = ".\NSIS\Plugins\x86-unicode"
if (!(Test-Path $pluginDir)) { New-Item -ItemType Directory -Path $pluginDir | Out-Null }
if (Test-Path ".\NSIS-ApplicationID\Release") {
Move-Item ".\NSIS-ApplicationID\Release\*" $pluginDir -Force
}
# 8. 下载 nsis_tauri_utils.dll v0.4.2 并重命名覆盖到插件目录
Invoke-WebRequest -Uri "https://github.com/tauri-apps/nsis-tauri-utils/releases/download/nsis_tauri_utils-v0.4.2/nsis_tauri_utils.dll" -OutFile "nsis_tauri_utils.dll"
if (Test-Path "nsis_tauri_utils.dll") {
Move-Item "nsis_tauri_utils.dll" (Join-Path $pluginDir "nsis_tauri_utils.dll") -Force
}
# 9. 移动 NSIS 和 WixTools314 到用户目录
if (!(Test-Path $tauriDir)) { New-Item -ItemType Directory -Path $tauriDir | Out-Null }
Move-Item .\NSIS (Join-Path $tauriDir "NSIS") -Force -ErrorAction SilentlyContinue
Move-Item .\WixTools314 (Join-Path $tauriDir "WixTools314") -Force -ErrorAction SilentlyContinue
Write-Host "rm temp dir"
# 10. 清理临时文件和目录
Remove-Item .\NSIS-ApplicationID -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item .\nsis-3.zip -Force -ErrorAction SilentlyContinue
Remove-Item .\NSIS-ApplicationID.zip -Force -ErrorAction SilentlyContinue
Remove-Item .\wix314-binaries.zip -Force -ErrorAction SilentlyContinue
cd ..
Remove-Item .\temp -Recurse -Force -ErrorAction SilentlyContinue
Write-Host "done"
|