2013. 3. 4. 19:34

계속 윈도우에 상주해있어야 하는 프로그램을 일반적인 응용프로그램으로 만들면 몇 가지 문제가 발생합니다.

일단 매번 켜주어야 하는데 이것은 메크로라던가 시작 프로그램에 등록함으로써 어느 정도 해결됩니다만..... 

계정 로그 오프 문제나 예기치 않은 재부팅 문제가 있다면 휴가 갔다가 원격 접속해서 프로그램 올리는 불상사가 생기죠 ㅎㅎㅎ;;

 

이런 경우 프로그램을 윈도우 서비스로 등록하면 계정의 로그온 상태와 상관없이 윈도우가 시작되면 동작하기 때문에 편리합니다.

 

여기서 한가지 주의해야 할 점은 서비스 프로그램은 일반적인 방법으로는 디버깅을 할 수 없습니다-_-;;

서비스에 등록해야만 동작을 하기 때문이죠.

 

그렇기 때문에 중단점 같은 일반적인 디버깅작업을 할 수 없습니다.

미리 윈폼 응용프로그램을 만들어 테스트를 하고 코드를 서비스 프로그램으로 옮기는 방식으로 디버깅하시는 게 좋습니다.

 

이 글은 MSDN에 "연습: 구성 요소 디자이너에서 Windows 서비스 응용 프로그램 만들기"를 참고로 만들어 졌습니다.

(참고 : MSDN - 연습: 구성 요소 디자이너에서 Windows 서비스 응용 프로그램 만들기)

 

 

1. 윈도우 서비스 응용 프로그램 만들기

새 프로젝트를 추가합니다.

지정할 템플릿은

Windows > Windows 서비스

입니다.

 

Service1.cs 파일을 '코드 보기'로 보시면 아래와 같이 코드가 생성된 것을 확인할 수 있습니다.

 

'OnStart()'는 서비스가 시작될 때 'OnStop()'는 서비스가 종료될 때 하는 동작입니다.

 

 

2. 테스트용 기능 만들기

일반적으로 윈도우 서비스 프로그램들의 로그는 '윈도우 이벤트 로그'로 쌓습니다.

하지만 테스트하는데 굳이 이렇게까지는 할 거 없고 그냥 C드라이브에 텍스트 파일이나 생성하도록 해봅시다 ㅡ.-;;

protected override void OnStart(string[] args)
{
	string sDir = @"c:\test.txt";

	//로그파일 생성
	StreamWriter sw = File.CreateText(sDir);
	sw.Close();
}

 

참 쉽죠?

서비스는 디버깅을 하고 싶어도 할 수 없습니다.

이런 메시지가 뜰 뿐이죠 ㅡ,.ㅡ;;

 

윈도우 서비스에 들어갈 코드는 일반 윈폼(WinForm)프로젝트에서 충분히 테스트한 후 윈도우 서비스로 올리시면 됩니다.

 

 

3. 윈도우 서비스 설정

어쩌니 저쩌니해도 결국 서비스로 올라간 것을 확인하고 동작하는지를 로컬상에서 테스트해 볼 필요는 있습니다.

그러기 위해서는 내 컴퓨터에 올려봐야겠죠?

 

'Service1.cs'를 오른쪽 클릭하여 디자이너 보기를 누릅니다.

빈공간에서 오른쪽 클릭을 하시고 '설치 관리자 추가'를 클릭합니다.

 

이렇게 하면 서비스로 올라갔을 때 설정을 할 수 있게 됩니다.

 

디자이너에서

'ProjectInstaller'를 클릭하고 속성에 'ServiceName'를 확인합니다.

이 속성은 '서비스'화면에서 볼 수 있는 이름입니다.

'StartType'속성을 'Automatic'로 바꿉니다.

이 속성이 컴퓨터가 재부팅되었을때 자동으로 시작할지 여부를 설정하는 속성입니다.

 

'serviceProcessInstaller1'를 클릭하고 속성에 'Account'를 찾아 'LocalService'로 바꿔줍니다.

서비스가 시작될 때 권한입니다.

 

 

4. 로컬에 서비스로 등록하기

이제 테스트를 위해 빌드한 프로그램을 서비스로 올려 봅시다.

 

그러기 위해서는 '개발자 명령 프롬프트'를 관리자 권한으로 열어야 합니다.

개발자 콘솔은 저기에 있습니다.

 

우리가 만든 '.exe'파일을 찾아 실행시켜주면 됩니다.

installutil.exe WindowsService1.exe

//지울때는 : installutil.exe /u WindowsService1.exe

성공하면 이렇게 표시됩니다.

 

 

제어판 > 관리 도구 > 서비스

에 들어가서 추가한 서비스가 있는지 확인해 봅시다.

 

 

아직은 시작 상태가 아니라서 파일이 생성되지 않았습니다.

이제 서비스를 시작해 봅시다.

 

정상적으로 파일이 생성되었네요 ㅎㅎㅎ

이 상태에서 대부분의 작업이 가능합니다.

 (소켓 통신이나 파일 변환 같은 것들)

 

 

마무리

MSDN에 있는 내용을 간추려서 답습해보았습니다.

MSDN을 보면 항상 아쉬운 것이 스크린샷이 너무 없어서 바로바로 이해하기가 힘들다는 점이죠-_-;;;;

그런 점은 좀 고쳤으면 하는 바람이;;;

 

배포를 위해서는 다음 글을 참고해 주세요~

참고 : [.Net] Windows 서비스 응용 프로그램 배포하기