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 ? "成功" : r.error);
} else if (s.state === "running") {
console.log("[成功] 服务正在运行,PID:", s.pid);
// 检查进程是否响应
let alive = proc_alive(s.pid);
if (!alive.responding) {
console.log("[警告] 进程无响应,正在重启服务...");
let r = svc_restart(svcName);
console.log("重启:", r.ok ? "成功" : r.error);
}
} else {
console.log("[信息] 状态:", s.state);
}
如何查找服务系统名称
可以按以下方式查找系统名称(非显示名称):
- PowerShell:
Get-Service | Where-Object { $_.DisplayName -like "*MyApp*" } | Select-Object Name - 任务管理器: 服务选项卡 → 名称列
- services.msc: 右键单击 → 属性 → 服务名字段