【Tauri2.0教程(九)】配置Tauri程序只能启动单实例

247 阅读1分钟

说明

什么是单实例,什么是多实例呢?

比如微信,就是单实例的,假如桌面上有微信的快捷方式图标,多次点击只会出现一个微信窗口。

比如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");
}

程序打包并安装后,可以查看想要的效果已经实现。