Sc.exe는 Windows XP 및 Windows Server 2003에 포함되어 있으며 Windows 2000 Server 리소스 키트에도 포함되어 있습니다.
sc create [Program ID방식의 Service name] binpath="서비스로 실행할 파일의 풀 경로 / 만약 매게변수가 있다면 함께" displayname="서비스 관리자 애플릿에 표시할 이름" depend="다른 관련 서비스의 ID" start="시작형태" obj="서비스 시작에 사용한 Windows NT 계정 이름"

머 이리저리 옵션이 많이 있지만, 서비스 등록을 위해 필요한 것들이나 주의를 길울여 살펴봐야 한다. 여기서 한가지 SC의 명령줄 옵션은 문법이 까다롭다고 한다. 등호 다음에 오는 공백은 SC가 나름의 구문 분석 규칙을 정의해 놓은 것으로 이해하고 따라해야 한다. 즉, SC는 스위치 이름을 binpath, displayname과 같이 인식하기 보다는 binpath=, displayname= 까지 인식한다고 보는것이 정확하다. 즉 binpath= 이후 공백이 하나 존재해야 하는 것이다.

그럼 sc명령어와 옵션을 하나하나 살펴 보자
1. sc create 다음에 오는 필수 인자가 [Program ID방식을 Service name]
    : 여기에는 영문만을 사용하는것을 권장하며 윈도우가 그렇듯 영문 대/소문자는 구분하지 않는다.

2. binpath 옵션
    : 서비스로 실행할 파일의 경로와 해당 파일에 전달되는 인수를 한꺼번에 지정한다. 파일 경로 상에 공백이 포함되면 따옴표로 묶는다는 것은 기본 상식이다. 만약 이렇게 한번 따옴표를 쓰고나면 인수에는 따옴표를 전달할 수 없는게 아니냐는 고민에 빠지기 쉬운데 그런 고민은 할 필요없다. 신경쓰지 말고 필요한 만큼 따옴표를 쓰면 된다. 머 정 쓰기 싫으면 공백없이 경로를 잡고 프로그램을 설치하면 될 것이다.

3. displayname 옵션
   : 서비스 관리자 애플릿(services.msc)에서 표시할 이름을 의미한다. 서비스 관리자에서 알아볼 수 있는 편리한 이름을 정해서 기입하면 되며 한글을 사용해도 무방하다.

4. depend 옵션
    : 동록하고자 하는 서비스를 실행하기 위하여 필요한 다른 서비스의 ID를 써주는 곳이다. 여러개의 서비스에 종속되어있다면 "/" 기호를 써서 구분해주면 된다.

5. start 옵션
    : 등록하고자 하는 서비스를 언제 실행할 것인가에 대한 사항을 적은 곳이다. 보통 auto, demand, boot, system, disabled 중 하나는 선택한다. auto는 시스템 서비스가 모두 시작되었으며 아직 로그인은 하지 않은 상태에서 실행하는 것을 말하며, demand는 어떤 형태로든 시스템에 대한 사용 권한을 얻은 이후에 직접 구동하는 것( 사용자가 아닌 프로그렘에 의한것도 포함 )을 의미힌다. boot와 system은 주로 장치 드라이버와 연관된 서비스나 운영 체제 핵심 서비스에만 한정되는 내용이고 disabled는 거의 쓸 일이 없으며 이름 그대로 "사용하지 않도록 등록"한다는 의미이다.

출처: 정확한 출처는 모르겠습니다.

6. obj 옵션
   : 이 서비스를 실행할 사용자 계정을 지정하는 곳이다. 대개 서비스를 등록하는 것은 특정 사용자와는 무관하게 독립적으로 실행되기 위한 것이므로 "NT AUTHORITY\LocalService"를 지정하면 적당하다. 하지만 직접 계정을 지정한다면 password 옵션을 써서 비밀번호를 따로 지정해야 한다.

그럼 위의 설명에 따라 Agent를 실행시키는 batch파일인 AgentStart.bat를 서비스에 등록하려면 다음과 같이 명령을 내리면 된다.

sc create RTCAgent
        binpath= "D:\Eclipse_Work\MySingleRTC\agent\Window\AgentStart.bat"  
        displayName= "RTCAgent" start= auto obj= "NT AUTHORITY\LocalService"


이렇게 등록하고 서비스 관리자에서 시작하면 된다.

자 그럼 등록을 했으면 삭제하는것도 봐야 되지 않을까?
서비스 삭제는 sc delete로 간단하게 된다.

sc delete [Program ID방식의 Service Name]


어떼 아주 간단하지 않을가?
여기서 사용되는 [Program ID방식의 Service Name]은 sc create를 이용해 서비스 등록할 때 사용했던 [Service Name]을 사용하면 된다. 몬든 삭제가 그렇듯 서비스 삭제에 있어서도 단 사용되는 [Program ID방식의 Service ID]는 윈도우 핵심 서비스일 수 있으니 삭제할 때는 각별한 유의가 필요하다.

마지막으로 등록된 서비스를 시작하는 것을 보도록 하자
서비스 시작 역시 서비스 삭제 만큼이나 간단하게 sc start로 되어있다.

sc start [Program ID방식의 Service Name]


이것역시 너무나 간단하지 않을가?
이쯤 되면 이곳에서 사용되는 [Program ID빙삭의 Service name]이 무엇인지는 굿이 설명하지 않아도 알것이다.

반응형

+ Recent posts