mirror of
https://github.com/clash-verge-rev/clash-verge-rev
synced 2025-05-05 11:13:46 +08:00
27 lines
707 B
Rust
27 lines
707 B
Rust
#![cfg(target_os = "windows")]
|
|
|
|
use crate::utils::dirs;
|
|
use anyhow::{bail, Result};
|
|
use deelevate::{PrivilegeLevel, Token};
|
|
use runas::Command as RunasCommand;
|
|
use std::process::Command as StdCommand;
|
|
|
|
pub async fn invoke_uwptools() -> Result<()> {
|
|
let resource_dir = dirs::app_resources_dir()?;
|
|
let tool_path = resource_dir.join("enableLoopback.exe");
|
|
|
|
if !tool_path.exists() {
|
|
bail!("enableLoopback exe not found");
|
|
}
|
|
|
|
let token = Token::with_current_process()?;
|
|
let level = token.privilege_level()?;
|
|
|
|
match level {
|
|
PrivilegeLevel::NotPrivileged => RunasCommand::new(tool_path).status()?,
|
|
_ => StdCommand::new(tool_path).status()?,
|
|
};
|
|
|
|
Ok(())
|
|
}
|