API: Windows-palvelut

Funktioita Windows-palvelun tilan tarkistamiseen, käynnistämiseen, pysäyttämiseen ja uudelleenkäynnistämiseen.

C++-rekisteröinti: regService(js).

Vaaditaan, että JsN.exe ajetaan järjestelmänvalvojana.


Mahdolliset palvelutilat

Tila (state) Koodi (code) Kuvaus
"running" 4 Palvelu on käynnissä
"stopped" 1 Palvelu on pysäytetty
"start_pending" 2 Käynnistys käynnissä
"stop_pending" 3 Pysäytys käynnissä
"paused" 7 Palvelu on keskeytetty
"pause_pending" 6 Siirtymässä keskeytettyyn tilaan
"continue_pending" 5 Jatkaminen käynnissä
"unknown" Tuntematon tila

svc_status

svc_status(name: string) → object

Hakee palvelun nykyisen tilan.

Parametrit:

Parametri Tyyppi Kuvaus
name string Palvelun järjestelmänimi (ei näyttönimi)

Tulos:

Kenttä Tyyppi Kuvaus
state string Tila yllä olevasta taulukosta
code number Numeerinen SERVICE_*-koodi (1–7)
pid number Palvelun prosessin PID (0, jos ei käynnissä)
error string Virheilmoitus tai ""

Esimerkki:

let s = svc_status("MyService");

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

svc_start

svc_start(name: string) → object

Käynnistää palvelun.

Parametrit:

Parametri Tyyppi Kuvaus
name string Palvelun järjestelmänimi

Tulos:

Kenttä Tyyppi Kuvaus
ok bool true — käynnistyskomennon lähetys onnistui
error string Virheilmoitus tai ""

Esimerkki:

let r = svc_start("MyService");
if (r.ok) {
    console.log("Palvelu käynnistyy");
} else {
    console.log("Käynnistysvirhe:", r.error);
}

svc_stop

svc_stop(name: string) → object

Pysäyttää palvelun.

Parametrit:

Parametri Tyyppi Kuvaus
name string Palvelun järjestelmänimi

Tulos:

Kenttä Tyyppi Kuvaus
ok bool true — pysäytyskomennon lähetys onnistui
error string Virheilmoitus tai ""

Esimerkki:

let r = svc_stop("MyService");
if (r.ok) {
    console.log("Palvelu pysähtyy");
} else {
    console.log("Pysäytysvirhe:", r.error);
}

svc_restart

svc_restart(name: string) → object

Käynnistää palvelun uudelleen: pysäytys → odota valmistumista (enintään 15 s) → käynnistys.

Parametrit:

Parametri Tyyppi Kuvaus
name string Palvelun järjestelmänimi

Tulos:

Kenttä Tyyppi Kuvaus
ok bool true — palvelun uudelleenkäynnistys onnistui
error string Virheilmoitus tai ""

Esimerkki:

let r = svc_restart("MyService");
if (r.ok) {
    console.log("Palvelu käynnistettiin uudelleen");
} else {
    console.log("Uudelleenkäynnistysvirhe:", r.error);
}

Täydellinen esimerkki: tilan tarkistus ja automaattinen uudelleenkäynnistys

let svcName = "MyService";

// Tarkista tila
let s = svc_status(svcName);

if (s.error) {
    console.log("[VIRHE] Tilaa ei saatu haettua:", s.error);
} else if (s.state === "stopped") {
    console.log("[VAROITUS] Palvelu on pysäytetty, käynnistetään...");
    let r = svc_start(svcName);
    console.log("Tulos:", r.ok ? "OK" : r.error);

} else if (s.state === "running") {
    console.log("[OK] Palvelu on käynnissä, PID:", s.pid);

    // Tarkista, vastaako prosessi
    let alive = proc_alive(s.pid);
    if (!alive.responding) {
        console.log("[VAROITUS] Prosessi on jumissa, käynnistetään palvelu uudelleen...");
        let r = svc_restart(svcName);
        console.log("Uudelleenkäynnistys:", r.ok ? "OK" : r.error);
    }

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

Kuinka löytää palvelun järjestelmänimi

Järjestelmänimi (ei näyttönimi) löytyy seuraavasti:

  1. PowerShell: Get-Service | Where-Object { $_.DisplayName -like "*MyApp*" } | Select-Object Name
  2. Tehtävienhallinta: Palvelut-välilehti → Nimi-sarake
  3. services.msc: hiiren oikealla painikkeella → Ominaisuudet → Palvelun nimi -kenttä