fix(rustdesk): reaplica install-service e valida estado RUNNING
This commit is contained in:
parent
56cd5fa344
commit
e9ba1790fb
2 changed files with 42 additions and 1 deletions
|
|
@ -431,6 +431,23 @@ fn ensure_service_running(exe_path: &Path) -> Result<(), RustdeskError> {
|
|||
}
|
||||
Err(error) => Err(error),
|
||||
}
|
||||
|
||||
// Revalida se o serviço realmente subiu; se não, reinstala e tenta novamente.
|
||||
match query_service_state() {
|
||||
Some(state) if state.eq_ignore_ascii_case("running") => Ok(()),
|
||||
_ => {
|
||||
log_event("Serviço RustDesk não está em execução após tentativa de start; reaplicando --install-service e start");
|
||||
let _ = run_with_args(exe_path, &["--install-service"]);
|
||||
let _ = run_sc(&["config", SERVICE_NAME, &format!("start= {}", "auto")]);
|
||||
start_sequence().or_else(|error| {
|
||||
log_event(&format!(
|
||||
"Falha ao subir o serviço RustDesk mesmo após reinstalação: {error}"
|
||||
));
|
||||
Ok(())
|
||||
})?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn configure_service_startup() -> Result<(), RustdeskError> {
|
||||
|
|
@ -451,6 +468,30 @@ fn configure_service_startup() -> Result<(), RustdeskError> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn query_service_state() -> Option<String> {
|
||||
let output = hidden_command("sc")
|
||||
.args(["query", SERVICE_NAME])
|
||||
.output()
|
||||
.ok()?;
|
||||
if !output.status.success() {
|
||||
return None;
|
||||
}
|
||||
let stdout = String::from_utf8_lossy(&output.stdout);
|
||||
for line in stdout.lines() {
|
||||
if let Some(pos) = line.find("STATE") {
|
||||
// Example: " STATE : 4 RUNNING"
|
||||
let state = line[pos..].to_string();
|
||||
if state.to_lowercase().contains("running") {
|
||||
return Some("running".to_string());
|
||||
}
|
||||
if state.to_lowercase().contains("stopped") {
|
||||
return Some("stopped".to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
fn stop_rustdesk_processes() -> Result<(), RustdeskError> {
|
||||
if let Err(error) = try_stop_service() {
|
||||
log_event(&format!(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue