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:
- PowerShell:
Get-Service | Where-Object { $_.DisplayName -like "*MyApp*" } | Select-Object Name - Gestione attività: Scheda Servizi → Colonna Nome
- services.msc: clic destro → Proprietà → Campo Nome servizio