单例
使用单实例插件确保 Tauri 应用程序在同一时间只运行单个实例。
This plugin requires a Rust version of at least 1.77.2
| Platform | Level | Notes |
|---|---|---|
| windows | ||
| linux | ||
| macos | ||
| android | | |
| ios | |
请安装单例插件。
使用项目的包管理器来添加依赖。
npm run tauri add single-instanceyarn run tauri add single-instancepnpm tauri add single-instancedeno task tauri add single-instancebun tauri add single-instancecargo tauri add single-instance-
在
src-tauri文件夹中运行以下命令,将插件添加到Cargo.toml中的项目依赖项中。cargo add tauri-plugin-single-instance --target 'cfg(any(target_os = "macos", windows, target_os = "linux"))' -
修改
lib.rs来初始化插件。lib.rs #[cfg_attr(mobile, tauri::mobile_entry_point)]pub fn run() {tauri::Builder::default().setup(|app| {#[cfg(desktop)]app.handle().plugin(tauri_plugin_single_instance::init(|app, args, cwd| {}));Ok(())}).run(tauri::generate_context!()).expect("error while running tauri application");}
插件已经安装并初始化,应该可以立即正常运行。尽管如此,我们也可以使用 init() 方法来增强它的功能。
插件的 init() 方法接受一个闭包,该闭包在新 App 实例启动时调用,但由插件关闭。
这个闭包有三个参数:
app:应用程序的 AppHandle 。args:用户初始化新实例时传递的参数列表。cwd:当前工作目录表示启动新应用程序实例的目录。
因此,闭包应该如下所示
.plugin(tauri_plugin_single_instance::init(|app, args, cwd| { // 在这里写代码 ……}))默认情况下,当应用程序已经在运行时启动新实例时,不会采取任何操作。当用户尝试打开一个新实例时,为了聚焦正在运行实例的窗口,修改回调闭包如下。
use tauri::{AppHandle, Manager};
pub fn run() { let mut builder = tauri::Builder::default(); #[cfg(desktop)] { builder = builder.plugin(tauri_plugin_single_instance::init(|app, args, cwd| { let _ = app.get_webview_window("main") .expect("no main window") .set_focus(); })); }
builder .run(tauri::generate_context!()) .expect("error while running tauri application");}© 2025 Tauri Contributors. CC-BY / MIT