본문 바로가기
Backend/Windows Service

Windows Service 개발 / Windows 서비스 앱 만들기 / 윈도우 서비스 실행 / eventLog

by SOLYI 2022. 11. 23.

갑작스럽게 서비스 개발을 하게 되었다.

 

현 회사에서는 항상 1) 유지보수 2)간단한 수정 3)개발. 이 순서로 진행 되었기 때문에

기존 코드에 대해 분석할 시간을 어느정도 확보 한 뒤 개발에 들어갈 수 있었으나

이번엔 요건 분석 + 기존 로직 분석이 1일, 개발 2일로 총 3일이 주어졌다.

 

갑자기 해본적도 (실은 써본적도 거의 없는) 없는 서비스 개발을 맡게 되어 당황스러웠지만

달리 맡을 사람이 없었기 때문에 내가 맡게 되었다.

 

그나마 다행인 점은, 기존에 참고할 프로젝트 코드가 있고,

매우 유사한 로직도 다른 프로젝트에서 참고 할 수 있다는 점.

 

국내엔 윈도우 유저가 압도적으로 많지만

윈도우즈의 '서비스' 라는 게 있다는걸 얼마나 알고 있을까..?

나도 네트워크 관리사 2급 시험을 보면서 이런게 있다 정도만 알고 있던터라 막막하기만 했다.

 

구현해야하는 기능을 간략하게 설명하자면

데이터를 DB에 쌓아 일정시간 간격으로 그 목록을 묶어 일괄로 메일 시스템으로 발신 요청하는 기능을 구현해야한다.

 

먼저 참고한 ms의 문서를 따라 작성해보았다.

 

자습서: Windows 서비스 앱 만들기 URL

 

자습서: Windows 서비스 앱 만들기 - .NET Framework

이 자습서에서는 이벤트 로그에 메시지를 쓰는 Windows 서비스 앱을 Visual Studio에서 만듭니다. 기능을 추가하고, 상태를 설정하고, 설치 관리자를 추가합니다.

learn.microsoft.com

 


 

< 서비스 프로젝트 생성 >

1. Visual Studio 에서 새로 만들기 > 프로젝트를 선택하고 windows Service(.NET Framework) 프로젝트 템플릿을 찾아 선택한다.

2. 이름에 MyNewService라고 입력하고 확인을 누른다.

3. 생성된 프로젝트의 솔루션 탐색기에서 이름을 MyNewService.cs로 변경한다.

4. 변경한 cs 파일을 클릭하고 아래 그림 2번의 빈곳을 클릭하면 속성(Peroperties) 에서 ServiceName을 변경할 수 있다.

5. 모두 저장한다.

 

< 서비스에 기능 추가 > 

* 이벤트 로그기능 추가

1. 파일을 클릭, 도구상자[ToolBox] 를 누른뒤 EventLog 도구를 디자인 탭으로 클릭해서 끌어온다.

eventLog가 추가된 모습

2. MyNewService.cs 파일을 코드 보기로 오픈한다. 위 화면에서 F7을 누르거나 우클릭 -> 코드보기 로 열 수 있다.

[코드 보기]로 봤을때 처음 작성되어있는 코드

3. MyService  생성자를 편집한다.

public MyNewService()
{
    InitializeComponent();
    eventLog1 = new System.Diagnostics.EventLog();
    if (!System.Diagnostics.EventLog.SourceExists("MySource"))
    {
        System.Diagnostics.EventLog.CreateEventSource(
            "MySource","MyNewLog");
    }
    eventLog1.Source = "MySource";
    eventLog1.Log = "MyNewLog";
}

4. OnStart 메서드를 편집한다.

protected override void OnStart(string[] args)
{
    eventLog1.WriteEntry("In OnStart.");
}

5.위 코드를 붙여 넣은 코드

 

폴링 메커니즘 설정

1. Timer using 을 추가한다.

2. OnStart메서드에 폴링 메커니즘을 설정한다.

3. 멤버 변수를 추가한다. 

4. OnTimer 메서드를 추가한다.

 

 

서비스 중지될때 수행하는 동작 정의

protected override void OnStop()
{
    eventLog1.WriteEntry("In OnStop.");
}

 

서비스의 다른 동작 정의

OnPause, OnContinue, OnShutdown 메서드를 재정의하여 구성 요소에 대한 처리 작업을 추가로 정의 할 수 있다. (생략한다!)

 

서비스 빌드

1. 프로젝트 우클릭 - 속성 선택

2. 애플리케이션 탭의 시작 개체 (Startup object) 에서 MyNewService.Program을 선택한다.

3. 프로젝트 우클릭 - 빌드 

4. 빌드 하면 결과물이 프로젝트의 경로/bin/Debug에 생긴다.

서비스 설치

1. Developer Command Prompt for VS 2022 를 관리자 권한으로 실행한다.

 

2. 위에서 만든 프로젝트의 경로/bin/Debug 폴더로 이동해서 

installutil 서비스이름.exe 를 실행하고, install 이 완료되었는지 확인한다.

 

 

서비스 시작 / 서비스 실행 / 서비스 중지

1.

 

 

서비스의 이벤트 로그 출력 확인

 

 

반응형