API: Windows-Dienste

Funktionen zum Abrufen des Status, Starten, Stoppen und Neustarten von Windows-Diensten.

C++-Registrierung: regService(js).

Erfordert, dass JsN.exe als Administrator ausgeführt wird.


Mögliche Dienstzustände

Zustand (state) Code (code) Beschreibung
"running" 4 Dienst wird ausgeführt
"stopped" 1 Dienst ist angehalten
"start_pending" 2 Start wird ausgeführt
"stop_pending" 3 Anhalten wird ausgeführt
"paused" 7 Dienst angehalten
"pause_pending" 6 Wird angehalten
"continue_pending" 5 Wird fortgesetzt
"unknown" Unbekannter Zustand

svc_status

svc_status(name: string) → object

Ruft den aktuellen Zustand eines Dienstes ab.

Parameter:

Parameter Typ Beschreibung
name string Systemname des Dienstes (nicht der Anzeigename)

Ergebnis:

Feld Typ Beschreibung
state string Zustand aus der obigen Tabelle
code number Numerischer SERVICE_*-Code (1–7)
pid number Prozess-ID (PID) des Dienstprozesses (0, wenn nicht ausgeführt)
error string Fehlermeldung oder ""

Beispiel:

let s = svc_status("MyService");

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

svc_start

svc_start(name: string) → object

Startet einen Dienst.

Parameter:

Parameter Typ Beschreibung
name string Systemname des Dienstes

Ergebnis:

Feld Typ Beschreibung
ok bool true — Startbefehl erfolgreich gesendet
error string Fehlermeldung oder ""

Beispiel:

let r = svc_start("MyService");
if (r.ok) {
    console.log("Dienst wird gestartet");
} else {
    console.log("Startfehler:", r.error);
}

svc_stop

svc_stop(name: string) → object

Stoppt einen Dienst.

Parameter:

Parameter Typ Beschreibung
name string Systemname des Dienstes

Ergebnis:

Feld Typ Beschreibung
ok bool true — Stoppbefehl erfolgreich gesendet
error string Fehlermeldung oder ""

Beispiel:

let r = svc_stop("MyService");
if (r.ok) {
    console.log("Dienst wird gestoppt");
} else {
    console.log("Stoppfehler:", r.error);
}

svc_restart

svc_restart(name: string) → object

Startet einen Dienst neu: Stoppen → Warten auf Abschluss (bis zu 15 Sek.) → Starten.

Parameter:

Parameter Typ Beschreibung
name string Systemname des Dienstes

Ergebnis:

Feld Typ Beschreibung
ok bool true — Dienst erfolgreich neu gestartet
error string Fehlermeldung oder ""

Beispiel:

let r = svc_restart("MyService");
if (r.ok) {
    console.log("Dienst neu gestartet");
} else {
    console.log("Neustartfehler:", r.error);
}

Vollständiges Beispiel: Zustandsprüfung und automatischer Neustart

let svcName = "MyService";

// Zustand prüfen
let s = svc_status(svcName);

if (s.error) {
    console.log("[FEHLER] Status konnte nicht abgerufen werden:", s.error);
} else if (s.state === "stopped") {
    console.log("[WARNUNG] Dienst ist gestoppt, starte...");
    let r = svc_start(svcName);
    console.log("Ergebnis:", r.ok ? "OK" : r.error);

} else if (s.state === "running") {
    console.log("[OK] Dienst wird ausgeführt, PID:", s.pid);

    // Prüfen, ob der Prozess reagiert
    let alive = proc_alive(s.pid);
    if (!alive.responding) {
        console.log("[WARNUNG] Prozess reagiert nicht, starte Dienst neu...");
        let r = svc_restart(svcName);
        console.log("Neustart:", r.ok ? "OK" : r.error);
    }

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

So finden Sie den Systemnamen des Dienstes

Der Systemname (nicht der Anzeigename) kann wie folgt gefunden werden:

  1. PowerShell: Get-Service | Where-Object { $_.DisplayName -like "*MyApp*" } | Select-Object Name
  2. Task-Manager: Registerkarte "Dienste" → Spalte "Name"
  3. services.msc: Rechtsklick → Eigenschaften → Feld "Dienstname"