目录
一、初始问题:cargo metadata 命令未找到
二、NSIS 下载权限错误(PermissionDenied)
三、签名私钥缺失错误
方案 A:禁用更新签名(推荐,如不需要自动更新)
方案 B:生成密钥并设置环境变量
四、构建时 sidecar 文件权限错误(持续出现)
五、最终构建结果
六、后续:安装后无法启动(待进一步排查)
七、关键经验总结
安装体验:
https://llzai.lanzoum.com/iJ37g3ur6nte
密码:1y52
本文档记录了从
bun run dev到bun run build过程中遇到的一系列问题及最终解决方案,供后续参考。
Mineradio-Tauri: 原作者:https://github.com/zzstar101/Mineradio-Tauri
一、初始问题:cargo metadata命令未找到
现象执行bun run dev时,Tauri 报错:
failed to run 'cargo metadata' command ... program not found
原因系统未安装 Rust 工具链,或cargo未添加到环境变量。
解决方案
安装 Rust(使用
rustup或winget install Rustlang.Rustup)。重新打开终端,验证
cargo --version正常输出。(Windows)安装 Visual Studio 生成工具,勾选“使用 C++ 的桌面开发”。
二、NSIS 下载权限错误(PermissionDenied)
现象构建过程中尝试下载nsis-3.11.zip时被拒绝访问:
Failed to open file: Os { code: 5, kind: PermissionDenied, message: "拒绝访问。" }解决方案
以管理员身份运行终端。
清理 Tauri 缓存(
%APPDATA%\tauri下的nsis相关文件)。或手动安装 NSIS 并设置
TAURI_NSIS_PATH环境变量。
三、签名私钥缺失错误
现象构建时提示:
A public key has been found, but no private key. Make sure to set TAURI_SIGNING_PRIVATE_KEY environment variable.
原因tauri.conf.json中配置了updater和pubkey,但未提供对应私钥。
解决方案(二选一)
方案 A:禁用更新签名(推荐,如不需要自动更新)
在tauri.conf.json中:
将
"createUpdaterArtifacts"设为false删除整个
"plugins"→"updater"对象
方案 B:生成密钥并设置环境变量
安装
tauri-cli(实际命令为cargo tauri)生成密钥对:
cargo tauri signer generate -w myapp.key将公钥内容填入
tauri.conf.json的pubkey字段设置环境变量
TAURI_SIGNING_PRIVATE_KEY(值为私钥文件完整内容)重新构建
更新:
安装后生成密钥
cargo tauri signer generate -w ~/.tauri/myapp.key
密码:12345678
输入两次
私钥:cmd
set TAURI_SIGNING_PRIVATE_KEY=dW50cnVzdGVkIGNvbW1lbnQ6IHJzaWduIGVuY3J5cHRlZCBzZWNyZXQga2V5ClJXUlRZMEl5ZWQrNWhIS2huMDYyU1VscjlRU0VrYUVDaVpXTDQ3Y3lEMEYyT004YXhoMEFBQkFBQUFBQUFBQUFBQUlBQUFBQW83VG1UYU53bTRHYnJMR3lOTUt3YWppSFNnV0QzT3dhL2NqOUVlWm1MNzRHUFV6Wjg0RWdHWENxeE9ZSnhjZUtyR21lWEhDOHlIbm9WQ285c0hEZUE4bkJtUjNzVGVYNHltWFFveFNYNEhwOGp1cXhML2VqSlJ5ay9OY1I3QktjcXBQMllVMncyTUE9Cg==
pub公钥:
dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEZGMUY3QzM2QzYxNzEzRTQKUldUa0V4ZkdObndmLzZTVmF6dlRpTkJTT3JHSHp3dDNqTDVOQ1F5S1ZyeWxxYVJvWVI3QTkya3oK
D:\ChangZhi\Mineradio-Tauri-main\apps\desktop\src-tauri\tauri.conf.json
{ "$schema": "https://schema.tauri.app/config/2", "productName": "MineRadio-Tauri", "version": "0.1.0", "identifier": "com.mineradio.fork.tauri", "build": { "beforeDevCommand": "bun run --filter @mineradio/web dev", "devUrl": "http://127.0.0.1:5173", "beforeBuildCommand": "bun run --filter @mineradio/web build && bun run --filter @mineradio/desktop build:sidecar", "frontendDist": "../../web/dist" }, "app": { "windows": [ { "label": "main", "title": "MineRadio-Tauri", "width": 1280, "height": 720, "minWidth": 960, "minHeight": 540, "decorations": false, "transparent": true, "shadow": false } ], "security": { "csp": "default-src 'self'; script-src 'self' 'wasm-unsafe-eval' https://cdn.jsdelivr.net/npm/@xenova/transformers@2.17.2 https://cdn.jsdelivr.net/npm/@xenova/transformers@2.17.2/; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: http://127.0.0.1:* http://*.music.126.net https://*.music.126.net http://y.qq.com https://y.qq.com http://*.y.qq.com https://*.y.qq.com http://*.gtimg.cn https://*.gtimg.cn http://*.qlogo.cn https://*.qlogo.cn; media-src 'self' blob: http://127.0.0.1:*; connect-src 'self' http://127.0.0.1:* http://ipc.localhost https://cdn.jsdelivr.net/npm/@xenova/transformers@2.17.2/ https://huggingface.co/Xenova/depth-anything-small-hf/ https://huggingface.co/api/resolve-cache/models/Xenova/depth-anything-small-hf/ https://us.aws.cdn.hf.co/xet-bridge-us/65b10f1dc9a5a7680fa72994/; worker-src 'self' blob:; object-src 'none'; base-uri 'none'; frame-ancestors 'none'", "devCsp": "default-src 'self' http://127.0.0.1:5173; script-src 'self' http://127.0.0.1:5173 'unsafe-eval' 'wasm-unsafe-eval' https://cdn.jsdelivr.net/npm/@xenova/transformers@2.17.2 https://cdn.jsdelivr.net/npm/@xenova/transformers@2.17.2/; style-src 'self' http://127.0.0.1:5173 'unsafe-inline'; img-src 'self' data: blob: http://127.0.0.1:* http://*.music.126.net https://*.music.126.net http://y.qq.com https://y.qq.com http://*.y.qq.com https://*.y.qq.com http://*.gtimg.cn https://*.gtimg.cn http://*.qlogo.cn https://*.qlogo.cn; media-src 'self' blob: http://127.0.0.1:*; connect-src 'self' http://127.0.0.1:* http://ipc.localhost ws://127.0.0.1:5173 https://cdn.jsdelivr.net/npm/@xenova/transformers@2.17.2/ https://huggingface.co/Xenova/depth-anything-small-hf/ https://huggingface.co/api/resolve-cache/models/Xenova/depth-anything-small-hf/ https://us.aws.cdn.hf.co/xet-bridge-us/65b10f1dc9a5a7680fa72994/; worker-src 'self' blob:; object-src 'none'; base-uri 'none'; frame-ancestors 'none'" } }, "bundle": { "active": true, "createUpdaterArtifacts": false, "targets": [ "nsis" ], "category": "Music", "externalBin": [ "binaries/mineradio-sidecar-api" ], "resources": [ "../../../LICENSE", "../../../THIRD_PARTY_NOTICES.md", "../../../PRIVACY.md", "../../../SECURITY.md" ], "icon": [ "icons/icon.ico" ], "shortDescription": "MineRadio-Tauri desktop music player", "longDescription": "A GPL-3.0 Tauri desktop music player.", "windows": { "allowDowngrades": false, "webviewInstallMode": { "type": "downloadBootstrapper", "silent": true }, "nsis": { "installMode": "currentUser", "installerIcon": "icons/icon.ico", "uninstallerIcon": "icons/icon.ico", "startMenuFolder": "MineRadio-Tauri", "languages": [ "SimpChinese", "English" ], "displayLanguageSelector": false } } }, "plugins": { "updater": { "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEZGMUY3QzM2QzYxNzEzRTQKUldUa0V4ZkdObndmLzZTVmF6dlRpTkJTT3JHSHp3dDNqTDVOQ1F5S1ZyeWxxYVJvWVI3QTkya3oK" } } }四、构建时 sidecar 文件权限错误(持续出现)
现象构建在tauri-build阶段崩溃,错误指向binaries\mineradio-sidecar-api-x86_64-pc-windows-msvc.exe:
called `Result::unwrap()` on an `Err` value: Os { code: 5, kind: PermissionDenied, message: "拒绝访问。" }原因该 sidecar 二进制文件被其他进程占用,或当前用户无访问权限。
最终解决方案(多步组合)
以管理员身份运行终端(最重要) 关闭当前终端,右键选择“以管理员身份运行”,重新执行
bun run build。将项目目录添加到 Windows Defender 排除列表Windows 安全中心 → 病毒和威胁防护 → 管理设置 → 排除项 → 添加文件夹
D:\ChangZhi\Mineradio-Tauri-main。清理构建缓存
cd apps\desktop\src-tauri cargo clean cd ..\..\..
重启电脑(释放所有文件锁) 重启后以管理员身份再次构建。
检查 sidecar 文件权限确保
binaries\mineradio-sidecar-api-x86_64-pc-windows-msvc.exe的属性→安全中,当前用户有“完全控制”权限。
五、最终构建结果
在完成上述所有步骤后,执行bun run build成功生成安装包:
Finished 1 bundle at: D:\ChangZhi\Mineradio-Tauri-main\apps\desktop\src-tauri\target\release\bundle\nsis\MineRadio-Tauri_0.1.0_x64-setup.exe └─ Done in 108.69 s
无任何Error输出,退出码为 0。
六、后续:安装后无法启动(待进一步排查)
虽然打包成功,但安装setup.exe后应用无法正常启动。可能原因及排查方向:
sidecar 未被正确复制到安装目录检查安装目录下的
binaries/或resources/中是否存在mineradio-sidecar-api.exe。前端资源未被正确打包检查
resources/app/下是否有index.html等文件。CSP 策略在生产环境中过于严格通过开启窗口的
devtools功能(在tauri.conf.json的windows中添加"devtools": true)并重新打包,按F12查看控制台错误。运行时依赖缺失如 Visual C++ Redistributable 未安装。
Rust 端 panic使用命令行启动 exe,观察控制台输出。
建议后续操作
在
tauri.conf.json中启用devtools,重新打包安装,查看前端错误。确保 sidecar 二进制文件在安装目录中存在且可独立运行。
检查 Windows 事件日志中的异常信息。
七、关键经验总结
Windows 权限问题是最常见障碍,始终优先尝试以管理员身份运行和关闭杀毒软件/添加排除。
Tauri 的更新签名在开发/测试阶段可安全禁用,简化构建流程。
sidecar 文件需在构建前确保存在且未被占用,可借助
cargo clean和重启释放句柄。每次修改
tauri.conf.json或依赖后,建议清理缓存再构建,避免遗留问题。
文档创建日期:2026-07-06
项目路径:D:\ChangZhi\Mineradio-Tauri-main
目标平台:Windows x64
构建工具:Bun + Tauri CLI (Rust)