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

サービスのシステム名の見つけ方

システム名 (表示名ではありません) は以下の方法で確認できます:

  1. PowerShell: Get-Service | Where-Object { $_.DisplayName -like "*MyApp*" } | Select-Object Name
  2. タスクマネージャー: 「サービス」タブ → 「名前」列
  3. services.msc: サービスを右クリック → 「プロパティ」 → 「サービス名」フィールド