본문 바로가기

Windows/명령어

sc.exe 명령어를 이용한 서비스 제어 1 - 서비스 조회

Windows 시스템의 서비스가 어떤 것인지는 아래 링크에서 설명했었다.
2008/04/04 - [Windows/기술과 팁] - Windows Server에서 기본적으로 수행되는 서비스 목록 및 설명

위와 같은 서비스의 시작, 중지, 삭제 등의 작업을 services.msc 스냅인을 사용하지 않고, 명령어 (sc)로 제어가 가능하며, 스냅인보다 더 많은 작업이 가능하다. 즉, sc 명령어로 서비스 프로그램을 테스트하고 디버깅도 할 수 있으며, 배치파일을 사용하여 서비스 시작 또는 종료를 자동화 할 수도 있다.


1. 시스템의 전체 서비스 보기
   아래와 같이 명령어를 실행하면 된다. 시스템의 모든 서비스는 매우 많기 때문에, more 옵션을
   사용하여 페이지 단위로 끊어 볼수 있게 한다. 다음 화면을 보려면 스페이스바를 누르고, 한 줄씩
   보려면 엔터키를 누른다.
   c:\> sc query | more

사용자 삽입 이미지


2. 시스템의 특정 서비스만 보기
   sc query 명령문 뒤에 서비스명을 입력해 주면 해당 서비스에 대한 결과만 조회된다.
   c:\> sc query Browser
사용자 삽입 이미지


3. 특정 Type 의 서비스만 보기
   type이 driver 인 것만 조회한다. type 은 driver/service 두 종류가 있으며, 기본값은 service다.
   모든 type 을 보려면 type= all 을 주면 된다. 주의할 점은 반드시 type= 뒤에 공백을 줘야 한다는
   것이다. type=driver 또는 type = driver 하면 조회가 되지 않는다.
   C:\>sc query type= driver | more
사용자 삽입 이미지


4. 특정 Type 의 서비스에 대해 그 종류를 지정한다. 여기에서 종류라 함은 자체 프로세스에서 실행하는 서비스로써 다른 서비스와 실행파일을 공유하지 않는 것인지(own, 기본값임), 공유 프로세스에서 실행하는 서비스로써 다른 서비스와 실행 파일을 공유하는지(share), 정보를 입력받아 PC와 상호 작용이 가능한지 (interact, 단, 이 종류는 반드시 LocalSystem 계정으로 실행되어야 함.), 드라이버 (kernel)인지, 파일시스템 드라이버 (filesys) 인지를 지정해 준다.
   C:\> sc query type= service type= share | more
사용자 삽입 이미지


5. 서비스의 상태를 지정해 준다.
   현재 사용중(active)인 서비스만 보거나, 정지 또는 일시정지(inactive)중인 서비스만 보거나
   아니면 모든(all) 서비스를 조회하게 한다.
   c:\> sc query state= inactive
   C:\> sc query type= service type= share state= inactive | more
사용자 삽입 이미지


6. 결과 출력을 위한 버퍼의 크기(bufsize, 기본은 1024 바이트)를 지정하거나 결과 출력 인덱스 번호 지정(ri, 기본은 0, bufsize와 함께 사용), 결과 출력할 그룹 지정(group) 등의 옵션도 있으나, 자주 사용하지 않으므로 생략하고 아래 설명으로 대체한다.

bufsize= BufferSize
  열거 버퍼의 크기를 바이트로 지정합니다. 기본 크기는 1024바이트입니다.
  쿼리의 표시 결과가 1024바이트를 초과하면 열거 버퍼의 크기를 증가시킵니다.
ri= ResumeIndex
  열거를 시작하거나 다시 시작할 인덱스 번호를 지정합니다. 기본값은 0입니다.
  쿼리에서 기본 버퍼가 표시할 수 있는 것보다 많은 정보를 반환하는 경우 이 매개 변수를
  bufsize= 매개 변수와 함께 사용합니다.
group= GroupName
  열거할 서비스 그룹을 지정합니다. 기본값은 모든 그룹입니다.
/?
  명령 프롬프트에서 도움말을 표시합니다.

[주의사항]
- 매개 변수와 값 사이에 공백이 없으면(예: type=own이 아니고 type= own인 경우) 작동이 실패합니다.
- query는 서비스에 대한 다음의 정보를 표시합니다. SERVICE_NAME(서비스 레지스트리 하위 키 이름),
  TYPE, STATE(사용할 수 없는 상태와 함께 표시), WIN32_EXIT_B, SERVICE_EXIT_B, CHECKPOINT,
  WAIT_HINT
- type= 매개 변수는 경우에 따라 두 번 사용할 수도 있습니다. type= 매개 변수가 첫 번째 나타나면
  서비스를 쿼리할 것인지 드라이버를 쿼리할 것인지 아니면 모두 다 쿼리할 것인지를 지정합니다.
  type=가 두 번째 나타나면 쿼리의 범위를 더 좁히기 위해 create로부터 종류를 지정합니다.
- query 명령으로부터 결과를 표시할 때 열거 버퍼 크기를 초과하면 다음 메시지와 비슷한 메시지가
  표시됩니다.
    Enum: more data, need 1822 bytes start resume at index 79
  남아있는 query 정보를 표시하려면 query를 다시 실행하고, bufsize=를 바이트 수로 설정하고 ri=를
  지정한 인덱스로 설정합니다. 예를 들어, 남아있는 출력은 명령줄에서 다음 내용을 입력하여 표시할
  수 있습니다.
    sc query bufsize= 1822 ri= 79


[기타 사용 예]
sc query
sc query messenger
sc query type= driver
sc query type= service
sc query state= all
sc query bufsize= 50
sc query ri= 14
sc query type= service type= interact
sc query type= driver group= ndis