feat(rustdesk): remove auto-run/atalho para evitar abrir GUI ao iniciar Raven
This commit is contained in:
parent
ccd8642629
commit
e8b58187c9
2 changed files with 55 additions and 0 deletions
|
|
@ -433,6 +433,8 @@ fn ensure_service_running(exe_path: &Path) -> Result<(), RustdeskError> {
|
||||||
Err(error) => Err(error),
|
Err(error) => Err(error),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
remove_rustdesk_autorun_artifacts();
|
||||||
|
|
||||||
// Revalida se o serviço realmente subiu; se não, reinstala e tenta novamente.
|
// Revalida se o serviço realmente subiu; se não, reinstala e tenta novamente.
|
||||||
match query_service_state() {
|
match query_service_state() {
|
||||||
Some(state) if state.eq_ignore_ascii_case("running") => Ok(()),
|
Some(state) if state.eq_ignore_ascii_case("running") => Ok(()),
|
||||||
|
|
@ -492,6 +494,58 @@ fn query_service_state() -> Option<String> {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn remove_rustdesk_autorun_artifacts() {
|
||||||
|
// Remove atalhos de inicialização automática para evitar abrir GUI a cada boot/login.
|
||||||
|
let mut startup_paths: Vec<PathBuf> = Vec::new();
|
||||||
|
if let Ok(appdata) = env::var("APPDATA") {
|
||||||
|
startup_paths.push(
|
||||||
|
Path::new(&appdata)
|
||||||
|
.join("Microsoft")
|
||||||
|
.join("Windows")
|
||||||
|
.join("Start Menu")
|
||||||
|
.join("Programs")
|
||||||
|
.join("Startup")
|
||||||
|
.join("RustDesk.lnk"),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
startup_paths.push(
|
||||||
|
Path::new("C:\\ProgramData")
|
||||||
|
.join("Microsoft")
|
||||||
|
.join("Windows")
|
||||||
|
.join("Start Menu")
|
||||||
|
.join("Programs")
|
||||||
|
.join("Startup")
|
||||||
|
.join("RustDesk.lnk"),
|
||||||
|
);
|
||||||
|
|
||||||
|
for path in startup_paths {
|
||||||
|
if path.exists() {
|
||||||
|
match fs::remove_file(&path) {
|
||||||
|
Ok(_) => log_event(&format!("Atalho de inicialização do RustDesk removido: {}", path.display())),
|
||||||
|
Err(error) => log_event(&format!(
|
||||||
|
"Falha ao remover atalho de inicialização do RustDesk ({}): {}",
|
||||||
|
path.display(),
|
||||||
|
error
|
||||||
|
)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for hive in ["HKCU", "HKLM"] {
|
||||||
|
let reg_path = format!(r"{}\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", hive);
|
||||||
|
let status = hidden_command("reg")
|
||||||
|
.args(["delete", ®_path, "/v", "RustDesk", "/f"])
|
||||||
|
.stdout(Stdio::null())
|
||||||
|
.stderr(Stdio::null())
|
||||||
|
.status();
|
||||||
|
if let Ok(code) = status {
|
||||||
|
if code.success() {
|
||||||
|
log_event(&format!("Entrada de auto-run RustDesk removida de {}", reg_path));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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!(
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,7 @@ Fluxo ideal:
|
||||||
- **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`, aplica `sc failure ... actions= restart/5000/...` e revalida se o serviço ficou em `RUNNING`. Se não subir, reaplica `--install-service` + `sc start` antes de seguir. Assim ele permanece no background/bandeja após boot, sem depender do usuário abrir a UI.
|
- **Serviço em background reforçado**: `ensure_service_running` sempre instala o serviço, força `start= auto`, aplica `sc failure ... actions= restart/5000/...` e revalida se o serviço ficou em `RUNNING`. Se não subir, reaplica `--install-service` + `sc start` antes de seguir. Assim ele permanece no background/bandeja após boot, sem depender do usuário abrir a UI.
|
||||||
|
- **Sem pop-up de GUI**: após configurar o serviço, removemos entradas de auto-run/atalhos (`HKCU/HKLM\...\Run` e `Start Menu\Programs\Startup\RustDesk.lnk`) para impedir que a janela do RustDesk abra a cada execução do Raven. O serviço continua ativo em segundo plano.
|
||||||
- **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