开机自启动是许多桌面工具类应用的刚需,比如剪贴板管理、效率监控、下载器等。Tauri 提供了官方插件 tauri-plugin-autostart,可以一行代码搞定跨平台的自启动注册与取消,无需手动处理不同操作系统的注册表、启动项或 plist 文件。
使用官方插件(推荐)
首先添加插件依赖,在 src-tauri 目录下运行:
cargo add tauri-plugin-autostart
然后在 Rust 端注册插件:
// src-tauri/src/main.rs 或 lib.rs
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_autostart::init(
MacosLauncher::LaunchAgent, // macOS 启动方式
None, // 可选的启动参数
))
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
前端通过 JavaScript 调用:
import { enable, disable, isEnabled } from '@tauri-apps/plugin-autostart';
// 查询当前是否已开启自启动
const enabled = await isEnabled();
// 开启自启动
await enable();
// 关闭自启动
await disable();
就是这么简单。 插件内部自动处理了:
- Windows:在注册表
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run中添加或删除当前程序的路径。 - macOS:创建或移除用户级别的 Launch Agent(
~/Library/LaunchAgents/com.yourapp.plist)。 - Linux:遵循 FreeDesktop 标准,在
~/.config/autostart/中创建或删除.desktop文件。
注意事项与最佳实践
- 权限与签名
macOS 上如果应用来自 App Store 或经过公证,Launch Agent 的运行不会触发安全警告。本地开发时系统可能会提示用户允许该程序在后台运行,这是正常现象。
- 启动参数
插件支持在注册自启动时传递命令行参数,例如 --minimized 让应用启动后自动隐藏窗口。可以在 Rust 初始化时传入:
.plugin(tauri_plugin_autostart::init(
MacosLauncher::LaunchAgent,
Some(vec!["--minimized".into()]),
))
- 用户可控开关
始终在设置界面提供自启动的开关,让用户自主决定,不要偷偷注册。
- 打包路径变更
如果应用更新后安装路径发生变化(例如从旧版本升级到新位置),之前注册的自启动项会失效。插件默认使用当前可执行文件的路径,更新时需要确保路径正确。若使用 NSIS 等安装程序,安装目录通常是固定的,一般不会出问题。
手动实现(备选方案)
如果不想依赖插件,也可以自己用 Rust 调用系统 API。以 Windows 为例:
use winreg::enums::*;
use winreg::RegKey;
fn set_autostart(enabled: bool) -> Result<(), Box<dyn std::error::Error>> {
let hkcu = RegKey::predef(HKEY_CURRENT_USER);
let path = r"Software\Microsoft\Windows\CurrentVersion\Run";
let (key, _) = hkcu.create_subkey(path)?;
let exe = std::env::current_exe()?.display().to_string();
if enabled {
key.set_value("YourAppName", &exe)?;
} else {
key.delete_value("YourAppName")?;
}
Ok(())
}
但这种方式需要自己处理跨平台兼容性,不如官方插件来得方便和安全。
小结
tauri-plugin-autostart 是目前最推荐的方式,调用简单、跨平台一致、维护成本低。配合合理的用户界面,你的 Tauri 应用可以像专业原生程序一样,在系统启动时静默运行在后台,随时等待用户的召唤。