API: Servizi Windows

Funzioni per ottenere lo stato, avviare, arrestare e riavviare i servizi Windows.

Registrazione C++: regService(js).

Richiede che JsN.exe venga eseguito come amministratore.


Stati possibili del servizio

Stato (state) Codice (code) Descrizione
"running" 4 Il servizio è in esecuzione
"stopped" 1 Il servizio è arrestato
"start_pending" 2 Avvio in corso
"stop_pending" 3 Arresto in corso
"paused" 7 In pausa
"pause_pending" 6 Transizione verso pausa
"continue_pending" 5 Ripresa in corso
"unknown" Stato sconosciuto

svc_status

svc_status(name: string) → object

Ottiene lo stato corrente di un servizio.

Parametri:

Parametro Tipo Descrizione
name string Nome di sistema del servizio (non il nome visualizzato)

Risultato:

Campo Tipo Descrizione
state string Stato dalla tabella sopra
code number Codice numerico SERVICE_* (1–7)
pid number PID del processo del servizio (0 se non in esecuzione)
error string Messaggio di errore o ""

Esempio:

let s = svc_status("MyService");

if (s.error) {
    console.log("Errore:", s.error);
} else {
    console.log("Stato:", s.state);  // "running"
    console.log("PID:", s.pid);      // 4321
}

svc_start

svc_start(name: string) → object

Avvia un servizio.

Parametri:

Parametro Tipo Descrizione
name string Nome di sistema del servizio

Risultato:

Campo Tipo Descrizione
ok bool true — comando di avvio inviato con successo
error string Messaggio di errore o ""

Esempio:

let r = svc_start("MyService");
if (r.ok) {
    console.log("Il servizio si sta avviando");
} else {
    console.log("Errore di avvio:", r.error);
}

svc_stop

svc_stop(name: string) → object

Arresta un servizio.

Parametri:

Parametro Tipo Descrizione
name string Nome di sistema del servizio

Risultato:

Campo Tipo Descrizione
ok bool true — comando di arresto inviato con successo
error string Messaggio di errore o ""

Esempio:

let r = svc_stop("MyService");
if (r.ok) {
    console.log("Il servizio si sta arrestando");
} else {
    console.log("Errore di arresto:", r.error);
}

svc_restart

svc_restart(name: string) → object

Riavvia un servizio: arresta → attende il completamento (fino a 15 sec) → avvia.

Parametri:

Parametro Tipo Descrizione
name string Nome di sistema del servizio

Risultato:

Campo Tipo Descrizione
ok bool true — servizio riavviato con successo
error string Messaggio di errore o ""

Esempio:

let r = svc_restart("MyService");
if (r.ok) {
    console.log("Servizio riavviato");
} else {
    console.log("Errore di riavvio:", r.error);
}

Esempio completo: controllo stato e riavvio automatico

let svcName = "MyService";

// Controlla lo stato
let s = svc_status(svcName);

if (s.error) {
    console.log("[ERRORE] Impossibile ottenere lo stato:", s.error);
} else if (s.state === "stopped") {
    console.log("[ATTENZIONE] Il servizio è arrestato, avvio in corso...");
    let r = svc_start(svcName);
    console.log("Risultato:", r.ok ? "OK" : r.error);

} else if (s.state === "running") {
    console.log("[OK] Il servizio è in esecuzione, PID:", s.pid);

    // Controlla se il processo risponde
    let alive = proc_alive(s.pid);
    if (!alive.responding) {
        console.log("[ATTENZIONE] Il processo è bloccato, riavvio del servizio...");
        let r = svc_restart(svcName);
        console.log("Riavvio:", r.ok ? "OK" : r.error);
    }

} else {
    console.log("[INFO] Stato:", s.state);
}

Come trovare il nome di sistema del servizio

Il nome di sistema (non il nome visualizzato) può essere trovato:

  1. PowerShell: Get-Service | Where-Object { $_.DisplayName -like "*MyApp*" } | Select-Object Name
  2. Gestione attività: Scheda Servizi → Colonna Nome
  3. services.msc: clic destro → Proprietà → Campo Nome servizio