人人都会AI编程

13.4 开机自启动:注册与取消、跨平台实现

更新时间:2026-07-11

开机自启动是许多桌面工具类应用的刚需,比如剪贴板管理、效率监控、下载器等。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 文件。

注意事项与最佳实践

  1. 权限与签名

macOS 上如果应用来自 App Store 或经过公证,Launch Agent 的运行不会触发安全警告。本地开发时系统可能会提示用户允许该程序在后台运行,这是正常现象。

  1. 启动参数

插件支持在注册自启动时传递命令行参数,例如 --minimized 让应用启动后自动隐藏窗口。可以在 Rust 初始化时传入:

   .plugin(tauri_plugin_autostart::init(
       MacosLauncher::LaunchAgent,
       Some(vec!["--minimized".into()]),
   ))
   
  1. 用户可控开关

始终在设置界面提供自启动的开关,让用户自主决定,不要偷偷注册。

  1. 打包路径变更

如果应用更新后安装路径发生变化(例如从旧版本升级到新位置),之前注册的自启动项会失效。插件默认使用当前可执行文件的路径,更新时需要确保路径正确。若使用 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 应用可以像专业原生程序一样,在系统启动时静默运行在后台,随时等待用户的召唤。