用途
该技能用于在 Tauri v2 应用中实现单实例(single-instance)行为,防止同一应用同时运行多个实例。当用户再次启动应用时,已运行的实例会被激活,而不是打开新的进程。
主要能力
- 阻止多个应用实例同时运行。
- 处理第二次启动时传入的命令行参数。
- 在重新启动时聚焦已存在的窗口。
- 可与深链接(deep-linking)配合,将 myapp:// 形式的 URL 从第二个实例路由到已有窗口。
- 可与 CLI 插件配合,将解析后的参数转发给正在运行的应用。
使用方式
安装单实例插件:
cargo add tauri-plugin-single-instance
在 Tauri builder 中注册插件并传入回调:
tauri::Builder::default()
.plugin(tauri_plugin_single_instance::init(|app, args, _cwd| {
// Focus the main window when a second instance is launched
if let Some(window) = app.get_webview_window("main") {
window.set_focus().unwrap();
}
// Forward args to the running instance
println!("Second launch args: {:?}", args);
}))
回调接收三个参数:应用句柄(app handle)、命令行参数(args)以及第二次启动时的工作目录(cwd)。回调执行完成后,第二个实例会自动退出。
适用场景
- 用户提到需要防止多个应用实例运行。
- 需要处理第二次启动的参数或深链接。
- 需要在重新启动时聚焦已有窗口。
- 触发短语包括:"single instance"、"prevent duplicate"、"second launch"、"one instance only"。
限制
资料中未提供关于平台兼容性、性能影响或额外配置要求的说明。