diff --git a/Cargo.lock b/Cargo.lock index dc7d6d8..64a85c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2080,9 +2080,9 @@ dependencies = [ "dashmap", "dunce", "easytier", + "elevated-command", "gethostname 0.5.0", "once_cell", - "privilege", "serde", "serde_json", "tauri", @@ -2168,6 +2168,20 @@ dependencies = [ "serde", ] +[[package]] +name = "elevated-command" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54c410eccdcc5b759704fdb6a792afe6b01ab8a062e2c003ff2567e2697a94aa" +dependencies = [ + "anyhow", + "base64 0.21.7", + "libc", + "log", + "winapi", + "windows 0.52.0", +] + [[package]] name = "embed-resource" version = "2.4.3" @@ -5832,18 +5846,6 @@ dependencies = [ "syn 2.0.87", ] -[[package]] -name = "privilege" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765ec92721e112ffe07f5c06fb0654da0b708990888981d05cf12a7c9909df30" -dependencies = [ - "libc", - "security-framework-sys", - "which 4.4.2", - "windows-sys 0.48.0", -] - [[package]] name = "proc-macro-crate" version = "1.3.1" diff --git a/easytier-gui/src-tauri/Cargo.toml b/easytier-gui/src-tauri/Cargo.toml index 97dfab6..d5cccbe 100644 --- a/easytier-gui/src-tauri/Cargo.toml +++ b/easytier-gui/src-tauri/Cargo.toml @@ -40,8 +40,7 @@ chrono = { version = "0.4.37", features = ["serde"] } once_cell = "1.18.0" dashmap = "6.0" - -privilege = "0.3" +elevated-command = "1.1.2" gethostname = "0.5" dunce = "1.0.4" diff --git a/easytier-gui/src-tauri/src/lib.rs b/easytier-gui/src-tauri/src/lib.rs index b0a06e8..101be71 100644 --- a/easytier-gui/src-tauri/src/lib.rs +++ b/easytier-gui/src-tauri/src/lib.rs @@ -128,18 +128,20 @@ fn toggle_window_visibility(app: &tauri::AppHandle) { #[cfg(not(target_os = "android"))] fn check_sudo() -> bool { - use std::env::current_exe; - let is_elevated = privilege::user::privileged(); + let is_elevated = elevated_command::Command::is_elevated(); if !is_elevated { - let Ok(exe) = current_exe() else { - return true; - }; + let exe_path = std::env::var("APPIMAGE") + .ok() + .or_else(|| std::env::args().next()) + .unwrap_or_default(); let args: Vec = std::env::args().collect(); - let mut elevated_cmd = privilege::runas::Command::new(exe); + let mut stdcmd = std::process::Command::new(&exe_path); if args.contains(&AUTOSTART_ARG.to_owned()) { - elevated_cmd.arg(AUTOSTART_ARG); + stdcmd.arg(AUTOSTART_ARG); } - let _ = elevated_cmd.force_prompt(true).hide(true).gui(true).run(); + elevated_command::Command::new(stdcmd) + .output() + .expect("Failed to run elevated command"); } is_elevated }