메뉴 건너뛰기


Developer > Operating System


윈도우즈에서 일반 콘솔프로그램 중에 서비스로 등록되면 좋을 것 같은 프로그램들이 있습니다.
서비스는 로그인이 되지 않더라도 부팅만 되면 실행되므로 이런 프로그램을 서비스로 등록할 수 있으면 많은 장점을 얻을 수 있을 것입니다. 
일반적으로 오픈소스는 리눅스나 유닉스를 대상으로 개발된 것들이 많아 일반 유닉스 deamon프로그램이 윈도우즈에 포팅되면 콘솔 프로그램이 되어 있는 경우가 많은데 이런 콘솔 프로그램을 윈도우즈의 서비스에 등록하는 방법에 대해서 알아보도록 하겠습니다.
 
MS사에서는 이러한 일들을 처리하기 위해 instsvr.exe과 srvany.exe라는 툴을 제공하고 잇습니다.
이 툴은 Windows설치시 같이 설치되지는 않고 Windows Resource Kit을 별도로 설치하여 구할 수 있습니다.
 
Windows 2003 Resource Kit을 받을 수 있는 곳은 다음과 같습니다.
 
여기서 이야기하는 툴만이 필요하다면 본 강좌에 첨부된 파일을 다운 받아 사용하셔도 됩니다.
 
이 툴이 돌아가 수 있는 요구 조건으로는 Windows XP Professional 또는 Windows Server 2003 family 라고 되어 있는데 아마 윈도우즈 서비스가 제공되는 모든 윈도우즈(NT계열만)에서 사용할 수 있을 거라 생각됩니다.
 
현재 사용자는 서비스를 다루어야 하기 때문에 Administrators 그룹의 멤버 권한을 갖은 계정에서만 정상적으로 돌아 갑니다.
 
instsvr의 사용방법은 다음과 같습니다.
 
1) 서비스 등록시
 
instsrv <ServiceName> <PathToExecuteable> [-a AccountName] [-p AccountPassword]
 
<ServiceName>은 서비스로 등록할 때 사용할 이름을 지정합니다.
<PathToExecuteable>은 서비스로 등록할 프로그램의 전체경로입니다.
[-a AccountName] 서비스가 동작할 때 사용할 계정을 지정할 수 있습니다. 지정하지 않으면 "로컬 시스템"이라는 가상으로 계정으로 등록됩니다.
[-p AccountPassword] -a에 의해 지정된 계정의 암호를 지정할 수 있습니다.
 
2) 서비스 등록 해제시 
 
instsrv <ServiceName> Remove
 
<ServiceName>은 서비스로 등록할 때 사용할 이름을 지정합니다.
 
서비스의 이름만 지정하면 되기 때문에 설치 후 삭제를 했는데도 서비스만 남아서 오류가 발생하는(잘못 등록되어 있는 서비스)를 제거하는 도구로도 사용할 수 있습니다. 
 
서비스가 될 수 있는 프로그램은 서비스 관리자와의 통신과 제어 신호를 처리해야 하는 프로그램이여야 하는데 우리는 지금 일반 콘솔 프로그램을 등록하려고 하고 있으니 이런 일을 대신하는 프로그램이 있어야 합니다.
 
이러한 역할을 하는 툴이 바로 srvany.exe라는 툴입니다.
이툴은 또한 콘솔 프로그램을 백그라운드로 돌리는 역할을 수행할 수도 있습니다.
 
예를 들어서 설명하도록 하겠습니다.
 
우선 실행하면 5초에 한번씩 화살이 날아가는 소리를 내는 그런 콘솔 프로그램이 있다고 합시다.
playarrow.exe라는 파일을 첨부하였습니다. 뭐 하는 일이라고는 5초마다 쓩 소리를 내는 그런 프로그램입니다. 왜 이런 프로그램을 만들었냐구요? ㅋㅋ 아~무 이유없어.
 
아무튼 첨부되어 있는 palyarrow.exe와 instsvr.exe, srvany.exe파일을 다운받아서 한 디렉토리에 저장하세요. 저는 C:\testsvr 이라는 디렉토리로 하겠습니다.
 
그럼 명령프롬프트 창을 열어서 C:\testsvr 로 이동하세요.
그런 다음 다음과 같은 명령을 실행합니다.
 
 
C:\testsvr>instsrv PlayArrowSound "C:\testsvr\srvany.exe" The service was successfuly added! Make sure that you go into the Control Panel and use the Services applet to change the Account Name and Password that this newly installed service will use for its Security Context.
 
위와 같이 서비스가 성공적으로 추가되었다고 나오네요. 
진짜로 추가 되었는지 확인하기 위해 서비스관리자를 열어서 한번 확인해 보세요.
 
instsvr1.png
 
보시는 것 처럼 PlayArrowSound라는 서비스가 추가되었네요.
하지만 아직 아무 것도 할 작업이 없으므로 시작을 시켜도 바로 중지됩니다.
 
그럼 이제 palyarrow.exe 를 등록해 보도록 하겠습니다.
등록작업은 직접 레지스트리의 값을 변경하여야 합니다.
 
시작 > 열기로 regedit 를 엽니다.
 
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PlayArrowSound"로 갑니다.
 
마우스 오른쪽 버튼을 클릭해서 "새로만들기" > "키"를 선택하신 다음에 이름을 "Parameters" 라고 줍니다.
 
이번에는 "Parameters"를 선택하고 "새로만들기" > "문자열 값"을 선택하신 다음 이름을 "Application" 라고 줍니다.
 
그리고 "Application"을 더블 클릭해서 나타나는 대화상자에 값으로 playarrow.exe 파일의 전체경로를 적어 주세요.
 
instsvr2.png
 
확인을 누른 다음 서비스 관리자에서 PlayArrowSound 서비스를 시작시켜 보십시오.
 
잘 동작하나요? 만약 안된다면 리부팅이 필요할 수도 있습니다.
 
어찌되었건 콘솔 프로그램을 서비스로 등록시켰네요.
 
이렇게 등록된 서비스를 삭제하시고 싶다면 다음과 같이 입력하여 삭제할 수 있습니다.
 
물론 서비스를 먼저 멈춰야 겠죠?
 
 
C:\testsvr>instsrv PlayArrowSound Remove The service was successfully deleted!
 
 
여기서 한가지만 더 알아보도록 하겠습니다.
 
레지스트리를 건드린 김에 하나만 더 건드리도록 하겠습니다.
서비스 관리자에 보면 "설명"이라는 칸이 있고 거기에 서비스가 뭐하는 서비스 인지가 적혀있는 것을 보셨을 겁니다. 이것을 추가해 보도록 하겠습니다.
 
regedit에서 다시 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PlayArrowSound" 에 갑니다.
 
그런 뒤 마우스 오른쪽 버튼 클릭 후 "새로만들기" > "문자열 값" 을 선택해서 "Description"이라는 이름을 추가하세요.
 
그리고 "Description"을 더블클릭해서 자유롭게 설명을 적으세요. 단, 1024문자까지만 가능합니다.
 
저는 "5초마다 화살이 나르는 소리를 들려주는 연습용 서비스입니다." 라고 적겠습니다.
 
다시 서비스 관리자를 띄우시고 보세요. 이미 띄워져 있다면 F5번을 누릅니다.
 
위에서 설정한 설명이 화면에 표시되나요?
 
instsvr3.png
 
 ^^;
레지스트리의 다른 부분도 서비스와 관련된 설정들을 조작할 수는 있지만 잘 모르시면 괜히 건드리지 마십시오. 레지스트리는 확실히 안다고 해도 안건드리는 것이 좋습니다.
 
여기까지 입니다.
 
 
Creative Commons License
Creative Commons License이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Copyright 조희창(Nicholas Jo). Some rights reserved. http://bbs.nicklib.com