add arg to avoid possible recursive run
Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
parent
02aedd234c
commit
9d8032e5e7
@ -8,12 +8,20 @@ pub fn core_main() -> Option<Vec<String>> {
|
||||
let mut args = Vec::new();
|
||||
let mut i = 0;
|
||||
let mut is_setup = false;
|
||||
let mut _is_elevate = false;
|
||||
let mut _is_run_as_system = false;
|
||||
for arg in std::env::args() {
|
||||
// to-do: how to pass to flutter?
|
||||
if i == 0 && crate::common::is_setup(&arg) {
|
||||
is_setup = true;
|
||||
} else if i > 0 {
|
||||
args.push(arg);
|
||||
if arg == "--elevate" {
|
||||
_is_elevate = true;
|
||||
} else if arg == "--run-as-system" {
|
||||
_is_run_as_system = true;
|
||||
} else {
|
||||
args.push(arg);
|
||||
}
|
||||
}
|
||||
i += 1;
|
||||
}
|
||||
@ -60,8 +68,7 @@ pub fn core_main() -> Option<Vec<String>> {
|
||||
#[cfg(windows)]
|
||||
#[cfg(not(debug_assertions))]
|
||||
if !crate::platform::is_installed() && args.is_empty() {
|
||||
let arg = if is_setup { "--noinstall" } else { "" };
|
||||
crate::platform::run_check_elevation(arg);
|
||||
crate::platform::elevate_or_run_as_system(is_setup, _is_elevate, _is_run_as_system);
|
||||
}
|
||||
if args.is_empty() {
|
||||
std::thread::spawn(move || crate::start_server(false));
|
||||
|
@ -1472,22 +1472,50 @@ pub fn run_as_system(arg: &str) -> ResultType<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn run_check_elevation(arg: &str) {
|
||||
if let Ok(false) = is_elevated(None) {
|
||||
if let Ok(true) = elevate(arg) {
|
||||
std::process::exit(0);
|
||||
} else {
|
||||
// do nothing but prompt
|
||||
}
|
||||
pub fn elevate_or_run_as_system(is_setup: bool, is_elevate: bool, is_run_as_system: bool) {
|
||||
// avoid possible run recursively due to failed run, which hasn't happened yet.
|
||||
let arg_elevate = if is_setup {
|
||||
"--noinstall --elevate"
|
||||
} else {
|
||||
"--elevate"
|
||||
};
|
||||
let arg_run_as_system = if is_setup {
|
||||
"--noinstall --run-as-system"
|
||||
} else {
|
||||
"--run-as-system"
|
||||
};
|
||||
let rerun_as_system = || {
|
||||
if !is_root() {
|
||||
if run_as_system(arg).is_ok() {
|
||||
if run_as_system(arg_run_as_system).is_ok() {
|
||||
std::process::exit(0);
|
||||
} else {
|
||||
// to-do: should not happen
|
||||
log::error!("Failed to run as system");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if is_elevate {
|
||||
if !is_elevated(None).map_or(true, |b| b) {
|
||||
log::error!("Failed to elevate");
|
||||
return;
|
||||
}
|
||||
rerun_as_system();
|
||||
} else if is_run_as_system {
|
||||
if !is_root() {
|
||||
log::error!("Failed to be system");
|
||||
}
|
||||
} else {
|
||||
if let Ok(true) = is_elevated(None) {
|
||||
// right click
|
||||
rerun_as_system();
|
||||
} else {
|
||||
// left click || run without install
|
||||
if let Ok(true) = elevate(arg_elevate) {
|
||||
std::process::exit(0);
|
||||
} else {
|
||||
// do nothing but prompt
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user