chore(rustdesk): reforça autostart e recuperação do serviço
This commit is contained in:
parent
a1436ea729
commit
463c0aeccd
2 changed files with 25 additions and 0 deletions
|
|
@ -405,6 +405,12 @@ fn derive_numeric_id(machine_id: &str) -> String {
|
||||||
fn ensure_service_running(exe_path: &Path) -> Result<(), RustdeskError> {
|
fn ensure_service_running(exe_path: &Path) -> Result<(), RustdeskError> {
|
||||||
ensure_service_installed(exe_path)?;
|
ensure_service_installed(exe_path)?;
|
||||||
|
|
||||||
|
if let Err(error) = configure_service_startup() {
|
||||||
|
log_event(&format!(
|
||||||
|
"Aviso: não foi possível reforçar autostart/recuperação do serviço RustDesk: {error}"
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
fn start_sequence() -> Result<(), RustdeskError> {
|
fn start_sequence() -> Result<(), RustdeskError> {
|
||||||
let _ = run_sc(&["stop", SERVICE_NAME]);
|
let _ = run_sc(&["stop", SERVICE_NAME]);
|
||||||
thread::sleep(Duration::from_secs(2));
|
thread::sleep(Duration::from_secs(2));
|
||||||
|
|
@ -427,6 +433,24 @@ fn ensure_service_running(exe_path: &Path) -> Result<(), RustdeskError> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn configure_service_startup() -> Result<(), RustdeskError> {
|
||||||
|
let start_arg = format!("start= {}", "auto");
|
||||||
|
run_sc(&["config", SERVICE_NAME, &start_arg])?;
|
||||||
|
|
||||||
|
let reset_arg = format!("reset= {}", "86400");
|
||||||
|
let actions_arg = "actions= restart/5000/restart/5000/restart/5000";
|
||||||
|
let failure_actions_applied = run_sc(&["failure", SERVICE_NAME, &reset_arg, actions_arg]).is_ok();
|
||||||
|
let _ = run_sc(&["failureflag", SERVICE_NAME, "1"]);
|
||||||
|
|
||||||
|
if failure_actions_applied {
|
||||||
|
log_event("Serviço RustDesk configurado para reiniciar automaticamente em caso de falha");
|
||||||
|
} else {
|
||||||
|
log_event("Aviso: não foi possível configurar recuperação automática do serviço RustDesk");
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
fn stop_rustdesk_processes() -> Result<(), RustdeskError> {
|
fn stop_rustdesk_processes() -> Result<(), RustdeskError> {
|
||||||
if let Err(error) = try_stop_service() {
|
if let Err(error) = try_stop_service() {
|
||||||
log_event(&format!(
|
log_event(&format!(
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@ Fluxo ideal:
|
||||||
- Reinicia serviço `RustDesk` (`sc start RustDesk` — pode falhar com `status Some(5)` se não há privilégio admin). Mesmo com falha, a CLI continua e grava o ID nos arquivos.
|
- Reinicia serviço `RustDesk` (`sc start RustDesk` — pode falhar com `status Some(5)` se não há privilégio admin). Mesmo com falha, a CLI continua e grava o ID nos arquivos.
|
||||||
- **Autoelevação única**: na primeira execução do botão “Preparar”, o Raven dispara um PowerShell elevado (`takeown + icacls`) para liberar ACL dos perfis `LocalService` e `LocalSystem`. O sucesso grava `rustdeskAclUnlockedAt` dentro de `%LOCALAPPDATA%\br.com.esdrasrenan.sistemadechamados\machine-agent.json` e cria o flag `rustdesk_acl_unlocked.flag`, evitando novos prompts de UAC nas execuções seguintes.
|
- **Autoelevação única**: na primeira execução do botão “Preparar”, o Raven dispara um PowerShell elevado (`takeown + icacls`) para liberar ACL dos perfis `LocalService` e `LocalSystem`. O sucesso grava `rustdeskAclUnlockedAt` dentro de `%LOCALAPPDATA%\br.com.esdrasrenan.sistemadechamados\machine-agent.json` e cria o flag `rustdesk_acl_unlocked.flag`, evitando novos prompts de UAC nas execuções seguintes.
|
||||||
- **Kill/restart seguro**: antes de tocar nos TOML, o Raven roda `sc stop RustDesk` + `taskkill /F /T /IM rustdesk.exe`. Isso garante que nenhum cliente sobrescreva o `RustDesk_local.toml` enquanto aplicamos a senha.
|
- **Kill/restart seguro**: antes de tocar nos TOML, o Raven roda `sc stop RustDesk` + `taskkill /F /T /IM rustdesk.exe`. Isso garante que nenhum cliente sobrescreva o `RustDesk_local.toml` enquanto aplicamos a senha.
|
||||||
|
- **Serviço em background reforçado**: `ensure_service_running` sempre instala o serviço, força `start= auto` e aplica `sc failure ... actions= restart/5000/...` para reiniciar o RustDesk automaticamente em caso de falha. Assim ele permanece no background/bandeja após boot, sem depender do usuário abrir a UI.
|
||||||
- **Replicação completa de perfis**: após aplicar `--password`, limpamos quaisquer arquivos antigos (`RustDesk*.toml`, `password`, `passwd*`) em `%APPDATA%`, `ProgramData`, `LocalService` e `LocalSystem` e, em seguida, reescrevemos tudo. Agora os `RustDesk2.toml` herdados recebem `verification-method = "use-permanent-password"` e `approve-mode = "password"` no bloco `[options]` antes mesmo do serviço subir, evitando que o RustDesk volte para "Use both".
|
- **Replicação completa de perfis**: após aplicar `--password`, limpamos quaisquer arquivos antigos (`RustDesk*.toml`, `password`, `passwd*`) em `%APPDATA%`, `ProgramData`, `LocalService` e `LocalSystem` e, em seguida, reescrevemos tudo. Agora os `RustDesk2.toml` herdados recebem `verification-method = "use-permanent-password"` e `approve-mode = "password"` no bloco `[options]` antes mesmo do serviço subir, evitando que o RustDesk volte para "Use both".
|
||||||
- **Validação por arquivo**: o Raven agora registra no `rustdesk.log` se o `password` gravado em cada `RustDesk_local.toml` coincide com o PIN configurado. Para inspecionar manualmente, rode no PowerShell (e valide que todas as linhas exibem o PIN esperado):
|
- **Validação por arquivo**: o Raven agora registra no `rustdesk.log` se o `password` gravado em cada `RustDesk_local.toml` coincide com o PIN configurado. Para inspecionar manualmente, rode no PowerShell (e valide que todas as linhas exibem o PIN esperado):
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue