diff --git a/apps/desktop/src-tauri/src/rustdesk.rs b/apps/desktop/src-tauri/src/rustdesk.rs index a17ff8f..55f5308 100644 --- a/apps/desktop/src-tauri/src/rustdesk.rs +++ b/apps/desktop/src-tauri/src/rustdesk.rs @@ -161,7 +161,7 @@ pub fn ensure_rustdesk( None }; - if let Err(error) = ensure_service_running() { + if let Err(error) = ensure_service_running(&exe_path) { log_event(&format!("Falha ao reiniciar serviço do RustDesk: {error}")); } else { log_event("Serviço RustDesk reiniciado/run ativo"); @@ -377,7 +377,9 @@ fn derive_numeric_id(machine_id: &str) -> String { format!("{:09}", num) } -fn ensure_service_running() -> Result<(), RustdeskError> { +fn ensure_service_running(exe_path: &Path) -> Result<(), RustdeskError> { + ensure_service_installed(exe_path)?; + fn start_sequence() -> Result<(), RustdeskError> { let _ = run_sc(&["stop", SERVICE_NAME]); thread::sleep(Duration::from_secs(2)); @@ -393,7 +395,8 @@ fn ensure_service_running() -> Result<(), RustdeskError> { command: format!("fix_acl ({error})"), status: Some(5), })?; - start_sequence() + let _ = run_sc(&["stop", SERVICE_NAME]); + start_sequence().or_else(|_| Ok(())) } Err(error) => Err(error), } @@ -414,6 +417,16 @@ fn run_sc(args: &[&str]) -> Result<(), RustdeskError> { Ok(()) } +fn ensure_service_installed(exe_path: &Path) -> Result<(), RustdeskError> { + if run_sc(&["query", SERVICE_NAME]).is_ok() { + return Ok(()); + } + + log_event("Serviço RustDesk não encontrado; instalando via CLI"); + run_with_args(exe_path, &["--install-service"])?; + Ok(()) +} + fn query_id_with_retries(exe_path: &Path, attempts: usize) -> Result { let mut last_error: Option = None; for attempt in 0..attempts {