API: Службы Windows
Функции для получения статуса, запуска, остановки и перезапуска служб Windows.
Регистрация в C++: regService(js).
Требует запуска JsN.exe от имени администратора.
Возможные состояния службы
Состояние (state) |
Код (code) |
Описание |
|---|---|---|
"running" |
4 | Служба работает |
"stopped" |
1 | Служба остановлена |
"start_pending" |
2 | Выполняется запуск |
"stop_pending" |
3 | Выполняется остановка |
"paused" |
7 | Приостановлена |
"pause_pending" |
6 | Переход в состояние паузы |
"continue_pending" |
5 | Возобновление работы |
"unknown" |
— | Неизвестное состояние |
svc_status
svc_status(name: string) → object
Получить текущее состояние службы.
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
name |
string | Системное имя службы (не отображаемое имя) |
Результат:
| Поле | Тип | Описание |
|---|---|---|
state |
string | Состояние из таблицы выше |
code |
number | Числовой код SERVICE_* (1–7) |
pid |
number | PID процесса службы (0, если не работает) |
error |
string | Сообщение об ошибке или "" |
Пример:
let s = svc_status("MyService");
if (s.error) {
console.log("Ошибка:", s.error);
} else {
console.log("Состояние:", s.state); // "running"
console.log("PID:", s.pid); // 4321
}
svc_start
svc_start(name: string) → object
Запустить службу.
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
name |
string | Системное имя службы |
Результат:
| Поле | Тип | Описание |
|---|---|---|
ok |
bool | true — команда запуска успешно отправлена |
error |
string | Сообщение об ошибке или "" |
Пример:
let r = svc_start("MyService");
if (r.ok) {
console.log("Служба запускается");
} else {
console.log("Ошибка запуска:", r.error);
}
svc_stop
svc_stop(name: string) → object
Остановить службу.
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
name |
string | Системное имя службы |
Результат:
| Поле | Тип | Описание |
|---|---|---|
ok |
bool | true — команда остановки успешно отправлена |
error |
string | Сообщение об ошибке или "" |
Пример:
let r = svc_stop("MyService");
if (r.ok) {
console.log("Служба останавливается");
} else {
console.log("Ошибка остановки:", r.error);
}
svc_restart
svc_restart(name: string) → object
Перезапустить службу: остановка → ожидание завершения (до 15 сек) → запуск.
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
name |
string | Системное имя службы |
Результат:
| Поле | Тип | Описание |
|---|---|---|
ok |
bool | true — служба успешно перезапущена |
error |
string | Сообщение об ошибке или "" |
Пример:
let r = svc_restart("MyService");
if (r.ok) {
console.log("Служба перезапущена");
} else {
console.log("Ошибка перезапуска:", r.error);
}
Полный пример: проверка состояния и автоматический перезапуск
let svcName = "MyService";
// Проверить состояние
let s = svc_status(svcName);
if (s.error) {
console.log("[ОШИБКА] Не удалось получить статус:", s.error);
} else if (s.state === "stopped") {
console.log("[ПРЕДУПРЕЖДЕНИЕ] Служба остановлена, запуск...");
let r = svc_start(svcName);
console.log("Результат:", r.ok ? "OK" : r.error);
} else if (s.state === "running") {
console.log("[OK] Служба работает, PID:", s.pid);
// Проверить, отвечает ли процесс
let alive = proc_alive(s.pid);
if (!alive.responding) {
console.log("[ПРЕДУПРЕЖДЕНИЕ] Процесс завис, перезапуск службы...");
let r = svc_restart(svcName);
console.log("Перезапуск:", r.ok ? "OK" : r.error);
}
} else {
console.log("[ИНФО] Состояние:", s.state);
}
Как найти системное имя службы
Системное имя (не отображаемое) можно найти:
- PowerShell:
Get-Service | Where-Object { $_.DisplayName -like "*MyApp*" } | Select-Object Name - Диспетчер задач: Вкладка «Службы» → столбец «Имя»
- services.msc: правая кнопка мыши → Свойства → поле «Имя службы»