Tauri (9) – پیاده سازی راه اندازی خودکار برنامه های دسکتاپ

مقدمه
در بسیاری از برنامههای دسکتاپ، اجرای ویژگی «راهاندازی در هنگام راهاندازی» یک الزام رایج است، بهویژه زمانی که برنامه باید بهمحض راهاندازی سیستمعامل بهطور خودکار شروع به کار کند و همچنان در حال اجرا باشد. این مقاله نحوه پیاده سازی ویژگی راه اندازی راه اندازی برای برنامه های دسکتاپ را با استفاده از آن معرفی می کند سختی.
اصل پیاده سازی
Tauri فراهم می کند tauri-plugin-autostart
افزونه، به توسعه دهندگان اجازه می دهد تا به راحتی برنامه ها را برای راه اندازی در هنگام راه اندازی پیکربندی کنند. این افزونه از چندین سیستم عامل (ویندوز، macOS، لینوکس) پشتیبانی می کند و API های ساده ای را برای مدیریت عملکرد شروع خودکار ارائه می دهد.
در حال نصب پلاگین
-
افزونه را نصب کنید: برای فعال کردن ویژگی راه اندازی راه اندازی، باید آن را نصب کنید
tauri-plugin-autostart
پلاگین در پروژه Tauri شما.ترمینال را در پوشه ریشه پروژه باز کنید و دستور زیر را اجرا کنید:
cargo tauri plugin add tauri-plugin-autostart
-
پیکربندی مجوزها: پس از نصب افزونه، پیکربندی را در قسمت آپدیت کنید
src-tauri/capabilities/default.json
فایلموارد زیر را به
permissions
بخش درsrc-tauri/capabilities/default.json
فایل:{ "$schema": "../gen/schemas/desktop-schema.json", "identifier": "default", "description": "Capability for the main window", "windows": ["main", "chat", "settings"], "permissions": [ "autostart:allow-enable", "autostart:allow-disable", "autostart:allow-is-enabled" ] }
پیاده سازی Rust Code
پیاده سازی عملکرد اصلی در src-tauri/src/autostart.rs
:
use std::{fs::create_dir, io::Read};
use tauri::{Manager, Runtime};
use tauri_plugin_autostart::ManagerExt;
pub fn enable_autostart(app: &mut tauri::App) {
use tauri_plugin_autostart::MacosLauncher;
app.handle()
.plugin(tauri_plugin_autostart::init(
MacosLauncher::AppleScript,
None,
))
.unwrap();
let autostart_manager = app.autolaunch();
match (
autostart_manager.is_enabled(),
current_autostart(app.app_handle()),
) {
(Ok(false), Ok(true)) => match autostart_manager.enable() {
Ok(_) => println!("Autostart enabled successfully."),
Err(err) => eprintln!("Failed to enable autostart: {}", err),
},
(Ok(true), Ok(false)) => match autostart_manager.disable() {
Ok(_) => println!("Autostart disabled successfully."),
Err(err) => eprintln!("Failed to disable autostart: {}", err),
},
_ => (),
}
}
fn current_autostart<R: Runtime>(app: &tauri::AppHandle<R>) -> Result<bool, String> {
use std::fs::File;
let path = app.path().app_config_dir().unwrap();
let mut old_value = true;
if path.exists() {
let file_path = path.join("autostart.txt");
if file_path.exists() {
let mut file = File::open(file_path).unwrap();
let mut data = String::new();
if let Ok(_) = file.read_to_string(&mut data) {
if !data.is_empty() {
old_value = data.parse().unwrap_or(true);
}
}
}
};
Ok(old_value)
}
#[tauri::command]
pub fn change_autostart<R: Runtime>(app: tauri::AppHandle<R>, open: bool) -> Result<(), String> {
use std::fs::File;
use std::io::Write;
let autostart_manager = app.autolaunch();
let change = |open: bool| -> Result<(), String> {
let mut open_str = String::from("");
if open {
autostart_manager
.enable()
.map_err(|_| "enable autostart failed".to_owned())?;
open_str = "true".to_owned();
} else {
autostart_manager
.disable()
.map_err(|_| "disable autostart failed".to_owned())?;
open_str = "false".to_owned();
}
let path = app
.path()
.app_config_dir()
.map_err(|_| "not found app config directory".to_owned())?;
if !path.exists() {
create_dir(&path).map_err(|_| "creating app config directory failed".to_owned())?;
}
let file_path = path.join("autostart.txt");
let mut file = File::create(file_path).unwrap();
file.write_all(open_str.as_bytes()).unwrap();
Ok(())
};
match (autostart_manager.is_enabled().unwrap(), open) {
(false, true) => change(true),
(true, false) => change(false),
_ => Err("no change".to_owned()),
}
}
ماژول را ثبت کنید src-tauri/src/lib.rs
:
mod autostart;
use autostart::{change_autostart, enable_autostart};
use tauri_plugin_autostart::MacosLauncher;
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
let mut ctx = tauri::generate_context!();
tauri::Builder::default()
.plugin(tauri_plugin_autostart::init(
MacosLauncher::AppleScript,
None,
))
.invoke_handler(tauri::generate_handler![change_autostart])
.setup(|app| {
enable_autostart(app);
Ok(())
})
.run(ctx)
.expect("error while running tauri application");
}
Frontend: پیکربندی شروع خودکار
در فرانت اند، دستورات باطن را فراخوانی کنید تا وضعیت راه اندازی راه اندازی را تغییر دهید:
import { isTauri, invoke } from "@tauri-apps/api/core";
import { isEnabled } from "@tauri-apps/plugin-autostart";
const [launchAtLogin, setLaunchAtLogin] = useState(true);
useEffect(() => {
const fetchAutoStartStatus = async () => {
if (isTauri()) {
try {
const status = await isEnabled();
setLaunchAtLogin(status);
} catch (error) {
console.error("Failed to fetch autostart status:", error);
}
}
};
fetchAutoStartStatus();
}, []);
const enableAutoStart = async () => {
if (isTauri()) {
try {
invoke("change_autostart", { open: true });
} catch (error) {
console.error("Failed to enable autostart:", error);
}
}
setLaunchAtLogin(true);
};
const disableAutoStart = async () => {
if (isTauri()) {
try {
invoke("change_autostart", { open: false });
} catch (error) {
console.error("Failed to disable autostart:", error);
}
}
setLaunchAtLogin(false);
};
نتیجه گیری
با tauri-plugin-autostart
پلاگین، پیاده سازی ویژگی “راه اندازی در هنگام راه اندازی” برای برنامه های Tauri ساده می شود. این افزونه از چندین پلتفرم پشتیبانی می کند و توسعه چند پلتفرمی این قابلیت را ساده می کند. با پیکربندی و استفاده از API Tauri، می توانید به راحتی وضعیت شروع خودکار برنامه خود را مدیریت کنید.
امیدوارم این مقاله به شما کمک کند تا عملکرد راه اندازی راه اندازی را برای برنامه دسکتاپ Tauri خود پیاده سازی کنید. در صورت داشتن هرگونه سوال در مورد بحث صحبت کنید!
منبع باز
اخیراً روی پروژه ای بر اساس تاوری به نام کوکو کار کرده ام. این است منبع باز و تحت بهبود مستمر. من مایل به حمایت شما هستم – لطفاً پروژه را رایگان بدهید ستاره 🌟!
این اولین پروژه Tauri من است و در حین کاوش در حال یادگیری بوده ام. من مشتاقانه منتظر ارتباط با افراد همفکر برای به اشتراک گذاشتن تجربیات و رشد با هم هستم!
از حمایت و توجه شما متشکرم!