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