说明
什么是单实例,什么是多实例呢?
比如微信,就是单实例的,假如桌面上有微信的快捷方式图标,多次点击只会出现一个微信窗口。
比如QQ,就是多实例的,假如桌面上有QQ的快捷方式图标,多次点击会出现多个QQ窗口。
tauri开发的程序,模式是多实例的,有时候这并不是我们想要的,这时候就需要进行配置。本文参考了官方文档进行实现。
安装插件
npm run tauri add single-instance
main.rs配置
use log::{log, Level};
use std::env;
use std::io::{BufRead, BufReader};
use std::os::windows::process::CommandExt;
use std::process::{Command, Stdio};
use tauri::{Emitter, AppHandle, Manager};
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
let mut builder = tauri::Builder::default();
#[cfg(desktop)]
{
// 配置程序以单例方式启动
builder = builder.plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| {
// if中的这3行缺一不可
if let Some(window) = app.get_webview_window("main") {
// 如果窗口最小化了,先恢复
let _ = window.unminimize();
// 显示window窗口
let _ = window.show();
// 然后将窗口激活、置顶
let _ = window.set_focus();
}
}));
}
//程序需要的其他配置
builder.plugin(tauri_plugin_dialog::init())
.invoke_handler(tauri::generate_handler![upscale_image])
.setup(|app| {
if cfg!(debug_assertions) {
app.handle().plugin(
tauri_plugin_log::Builder::default()
.level(log::LevelFilter::Info)
.build(),
)?;
}
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
程序打包并安装后,可以查看想要的效果已经实现。