官方有这个单例的插件可以直接使用:单例 | Tauri,使用单实例插件确保 Tauri 应用程序在同一时间只运行单个实例。插件已经安装并初始化,应该可以立即正常运行。尽管如此,我们也可以使用 init()
方法来增强它的功能。插件的 init()
方法接受一个闭包,该闭包在新 App 实例启动时调用,但由插件关闭。 这个闭包有三个参数。
安装
csharp
pnpm tauri add single-instance
然后配置权限:
在rust中写一个函数用于处理单例逻辑:
rust
// 单例模式,当二次启动时聚焦
pub fn show_window(app: &AppHandle) {
let main = app.get_webview_window("main");
if let Some(main) = main {
main.unminimize().expect("Sorry, can't unminimize window");
main.set_focus().expect("Sorry, can't focus window");
} else {
app.webview_windows()
.values()
.next()
.expect("Sorry, no window found")
.set_focus()
.expect("Can't Bring Window to Focus");
}
}
在lib.rs中调用这个插件和函数:
rust
.plugin(tauri_plugin_single_instance::init(|app, _, _| {
utils::init::show_window(app);
}))
然后重新编译后就可以了