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);
}

如何查找服务系统名称

可以按以下方式查找系统名称(非显示名称):

  1. PowerShell: Get-Service | Where-Object { $_.DisplayName -like "*MyApp*" } | Select-Object Name
  2. 任务管理器: 服务选项卡 → 名称列
  3. services.msc: 右键单击 → 属性 → 服务名字段