본문 바로가기

Windows/명령어

sc.exe 명령어를 이용한 서비스 제어 4 - 등록된 서비스 삭제, 새로운 서비스 등록하기

예전에 PC에 Windows를 설치하다가, 무언가 잘못되어 help 서비스가 설치되지 않아, 윈도우 도움말을 사용할 수 없게 되었을때, MS에 문의하여 알게 된 방법이다.

처음에는 윈도우 도움말 서비스인 helpsvc 가 시작되지 않은 것이 원인이라고 파악하여, 아래와 같이 서비스 시작 명령을 사용했다.

sc start helpsvc


하지만, 마찬가지로 윈도우 도움말은 에러가 발생했고, 결국 helpsvc를 아래 순서대로 새로 등록해줘야 했다.
sc start C:\WINDOWS\System32\"svchost.exe -k netsvcs"

sc create helpsvc binPath= "C:\WINDOWS\System32\svchost.exe -k netsvcs" type= share start= auto depend= RpcSs DisplayName= "Help and Support"

sc create helpsvc binPath= "C:\WINDOWS\PCHEALTH\HELPCTR\Binaries\helpsvc.exe" type= share start= auto depend= RpcSs DisplayName= "Help and Support"


이처럼 sc create 는 서비스를 새로 등록해야 하는 경우에 사용하는 명령이다.
자세한 내용은 아래와 같다.

구문

sc [ServerName] create [ServiceName] [type= {own|share|kernel|filesys|rec|adapt|interact type= {own|share}}] [start= {boot|system|auto|demand|disabled}] [error= {normal|severe|critical|ignore}] [binpath= BinaryPathName] [group= LoadOrderGroup] [tag= {yes|no}] [depend= dependencies] [obj= {AccountName|ObjectName}] [displayname= DisplayName] [password= Password]

매개 변수

ServerName
서비스가 있는 원격 컴퓨터의 이름을 지정합니다. 이름은 UNC 형식을 사용해야 합니다("\\myserver"). SC.exe를 로컬에서 실행하는 경우 이 매개 변수를 무시합니다.
ServiceName
getkeyname 작업이 반환한 서비스 이름을 지정합니다.
type= {own|share|kernel|filesys|rec|adapt|interact type= {own|share}}
서비스 종류를 지정합니다. 기본값은 type= own입니다.
설명
own 서비스는 자체 프로세스에서 실행합니다. 다른 서비스와 실행 파일을 공유하지 않습니다. 기본값입니다.
share 서비스를 공유 프로세스로 실행합니다. 다른 서비스와 실행 파일을 공유합니다.
kernel 드라이버입니다.
filesys 파일 시스템 드라이버입니다.
rec 컴퓨터에서 사용되는 파일 시스템을 확인하는 파일 시스템 인식 드라이버입니다.
interact 사용자가 정보를 입력하면 서비스는 데스크톱과 상호 작용할 수 있습니다. 대화형 서비스는 LocalSystem 계정으로 실행해야 합니다. 이 서비스 종류는 type= own 또는 type= shared와 연계하여 사용해야 합니다(예: type= interact type= own). type= interact을 단독으로 사용하면 유효하지 않은 매개 변수 오류가 만들어집니다.
start= {boot|system|auto|demand|disabled}
서비스의 시작 종류를 지정합니다. 기본 시작은 start= demand입니다.
boot 부팅 로더에 의해 로드되는 장치 드라이버입니다.
system 커널을 초기화하는 동안 시작하는 장치 드라이버입니다.
auto 컴퓨터를 자동으로 다시 시작하거나 로그온한 사람이 없어도 자동으로 컴퓨터를 실행하는 서비스입니다.
demand 수동으로 시작해야 하는 서비스입니다. start=를 지정하지 않는 경우 이것이 기본값입니다.
disabled 시작할 수 없는 서비스입니다. 사용할 수 없는 서비스를 시작하려면 시작 종류를 다른 값으로 변경합니다.
error= {normal|severe|critical|ignore}
부팅하는 동안 서비스가 실패하는 경우 오류의 심각도를 지정합니다. 기본값은 error= normal입니다.
normal 오류가 기록되고 서비스 시작을 실패한 사용자 정보에 대한 메시지 상자가 표시됩니다. 시작을 계속합니다. 기본값입니다.
severe 가능한 경우에는 오류가 기록됩니다. last-known-good 구성으로 컴퓨터를 다시 시작하도록 시도합니다. 이렇게 설정하면 컴퓨터를 다시 시작할 수 있지만 서비스는 여전히 실행할 수 없습니다.
critical 가능한 경우에는 오류가 기록됩니다. last-known-good 구성으로 컴퓨터를 다시 시작하도록 시도합니다. last-known-good 구성을 실패하면 시작도 실패하고 중단 오류가 나타나면서 부팅 프로세스가 중단됩니다.
ignore 오류를 기록하고 시작을 계속합니다. 이벤트 로그에 오류를 기록할 뿐 사용자에게 알리지 않습니다.
binpath= BinaryPathName
서비스 이진 파일의 경로를 지정합니다. binpath=의 경우 기본값이 없고 이 문자열을 제공해야 합니다.
group= LoadOrderGroup
이 서비스가 소속된 그룹의 이름을 지정합니다. 그룹 목록이 HKLM\System\CurrentControlSet\Control\ServiceGroupOrder 하위 키의 레지스트리에 저장됩니다. 기본값은 null입니다.
tag= {yes|no}
CreateService 호출에서 TagID를 가져올 것인지 여부를 지정합니다. 태그는 부팅 시작 및 시스템 시작 드라이버에만 사용됩니다.
depend= dependencies
이 서비스 전에 시작해야 하는 서비스 또는 그룹의 이름을 지정합니다. 이름은 슬래시(/)로 구분합니다.
obj= {AccountName|ObjectName}
서비스를 실행할 계정의 이름을 지정하거나 드라이버를 실행할 Windows 드라이버 개체의 이름을 지정합니다.
displayname= DisplayName
사용자에게 서비스를 확인시키기 위해 사용자 인터페이스 프로그램에서 사용될 이름을 친근한 이름으로 지정합니다.
password= Password
암호를 지정합니다. LocalSystem 계정 이외의 계정을 사용하는 경우에 필요합니다.
/?
명령 프롬프트에서 도움말을 표시합니다.

설명

  • 매개 변수와 값 사이에 공백이 없으면(예: type=own이 아니고 type= own인 경우) 작동이 실패합니다.

예제

다음 예제는 sc create 명령을 사용하는 방법을 보여줍니다.

sc \\myserver create NewService binpath= c:\windows\system32\NewServ.exe
sc create NewService binpath= c:\windows\system32\NewServ.exe type= share start= auto depend= "+TDI Netbios"


마찬가지로 서비스를 삭제할 수도 있는데, 삭제는 간단하다.
  sc delete 서비스명
newserv 라는 서비스를 삭제하고자 한다면,
  sc delete newserv 라고만 하면 끝난다.

관련글 : 2008/04/08 - [Windows/명령어] - sc.exe 명령어를 이용한 서비스 제어 1 - 서비스 조회