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: 마우스 오른쪽 버튼 클릭 → 속성 → 서비스 이름 필드