API: Servicios de Windows

Funciones para obtener el estado, iniciar, detener y reiniciar servicios de Windows.

Registro en C++: regService(js).

Requiere que JsN.exe se ejecute como administrador.


Posibles estados del servicio

Estado (state) Código (code) Descripción
"running" 4 El servicio está en ejecución
"stopped" 1 El servicio está detenido
"start_pending" 2 Inicio en progreso
"stop_pending" 3 Detención en progreso
"paused" 7 Pausado
"pause_pending" 6 Transición a pausa
"continue_pending" 5 Reanudando
"unknown" Estado desconocido

svc_status

svc_status(name: string) → object

Obtiene el estado actual de un servicio.

Parámetros:

Parámetro Tipo Descripción
name string Nombre del sistema del servicio (no el nombre para mostrar)

Resultado:

Campo Tipo Descripción
state string Estado de la tabla anterior
code number Código numérico SERVICE_* (1–7)
pid number PID del proceso del servicio (0 si no está en ejecución)
error string Mensaje de error o ""

Ejemplo:

let s = svc_status("MiServicio");

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

svc_start

svc_start(name: string) → object

Inicia un servicio.

Parámetros:

Parámetro Tipo Descripción
name string Nombre del sistema del servicio

Resultado:

Campo Tipo Descripción
ok bool true — comando de inicio enviado con éxito
error string Mensaje de error o ""

Ejemplo:

let r = svc_start("MiServicio");
if (r.ok) {
    console.log("El servicio se está iniciando");
} else {
    console.log("Error al iniciar:", r.error);
}

svc_stop

svc_stop(name: string) → object

Detiene un servicio.

Parámetros:

Parámetro Tipo Descripción
name string Nombre del sistema del servicio

Resultado:

Campo Tipo Descripción
ok bool true — comando de detención enviado con éxito
error string Mensaje de error o ""

Ejemplo:

let r = svc_stop("MiServicio");
if (r.ok) {
    console.log("El servicio se está deteniendo");
} else {
    console.log("Error al detener:", r.error);
}

svc_restart

svc_restart(name: string) → object

Reinicia un servicio: detener → esperar a que finalice (hasta 15 seg) → iniciar.

Parámetros:

Parámetro Tipo Descripción
name string Nombre del sistema del servicio

Resultado:

Campo Tipo Descripción
ok bool true — servicio reiniciado con éxito
error string Mensaje de error o ""

Ejemplo:

let r = svc_restart("MiServicio");
if (r.ok) {
    console.log("Servicio reiniciado");
} else {
    console.log("Error al reiniciar:", r.error);
}

Ejemplo completo: verificación de estado y reinicio automático

let svcName = "MiServicio";

// Verificar estado
let s = svc_status(svcName);

if (s.error) {
    console.log("[ERROR] No se pudo obtener el estado:", s.error);
} else if (s.state === "stopped") {
    console.log("[ADVERTENCIA] El servicio está detenido, iniciando...");
    let r = svc_start(svcName);
    console.log("Resultado:", r.ok ? "OK" : r.error);

} else if (s.state === "running") {
    console.log("[OK] El servicio está en ejecución, PID:", s.pid);

    // Verificar si el proceso responde
    let alive = proc_alive(s.pid);
    if (!alive.responding) {
        console.log("[ADVERTENCIA] El proceso está bloqueado, reiniciando servicio...");
        let r = svc_restart(svcName);
        console.log("Reinicio:", r.ok ? "OK" : r.error);
    }

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

Cómo encontrar el nombre del sistema del servicio

El nombre del sistema (no el nombre para mostrar) se puede encontrar:

  1. PowerShell: Get-Service | Where-Object { $_.DisplayName -like "*MiApp*" } | Select-Object Name
  2. Administrador de tareas: Pestaña Servicios → Columna Nombre
  3. services.msc: clic derecho → Propiedades → Campo Nombre del servicio