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();

}

 

참 쉽죠?

하지만 디버깅을 하고싶어도 할수 없습니다.

 

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

 

윈도우 서비스에 들어갈 코드는 일반 윈폼프로젝트에서 충분이 테스트를 하신후에 윈도우 서비스로 올리시면 됩니다.

 

3.윈도우 서비스 설정

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

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

 

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

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

 

 

 

 

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

 

디자이너에서

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

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

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

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

 

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

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

 

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

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

 

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

 

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

 

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

 

installutil.exe WindowsService1.exe

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

 

 

 

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

 

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

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

 

 

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

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

 

 

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

이 상태에서 대부분의 작업이 가능합니다.(소켓통신이나 파일 변환 같은 것들)

 

마무리

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

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

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

 

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

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



 

 

댓글 작성

이름
패스워드
홈페이지
비밀글