프로그래밍/C#

[C#] 서비스프로그램 만들기

ss-pro 2022. 10. 22. 11:20
반응형

서버 프로그램이나 백그라우드 서비스 형태로 처리되어야 되는 경우는 화면UI가 있는 응용프로그램이 아닌 서비스 형태의 프로그램으로 만들어 사용하는 경우가 많습니다. 서비스프로그램으로 만드는 방법에대해 알아보겠습니다.

1. Windows서비스 프로그램 메뉴선택

2. Windows서비스 이름 설정
서비스 프로젝트를 생성 후 서비스 이름을 변경하기 위해서는 속성값이 ServiceName의 값을 변경하면됩니다. ssproService라고 서비스이름으로 만들어 보겠습니다.

프로그램 빌드를 해보면 아래와 같이 Windows서비스 시작오류가 나타납니다. 윈도우 서비스의 경우는 설치관리자를 사용하여 서비스에 등록 후 사용해야합니다.

3. 설치관리자 추가. 서비스시작유형을 자동으로 설치
설치관리자를 추가하여 서비스동작 정보를 설정하도록 하겠습니다. MyFirstService.cs에 마우스 오른쪽 버튼을 눌러 설치관리자 추가 항목을 클릭합니다.

StartType을 Automatic으로 설정합니다. 이부분은 윈도우 서비스의 시작을 수동,자동,사용안함등을 설정하여 시작시 동작모드를 설정 할 수 있습니다.

4. 서비스 로그온설정을 로컬시스템으로 설치
설치관리자를 추가하면 ProjectInstaller.cs파일이 생기며 해당파일에서 계정정보를 설정 할 수 있습니다. LocalSystem으로 설정하고 진행해보겠습니다. Account권한은 보안부분과 연관이 있으니 관련 내용을 살펴보시고 실제 프로젝트 적용시에는 사용 용도에 맞게 적절하게 설정하시면됩니다.

5. 소스코드 설명 및 프로그램 빌드
서비스로 프로그램을 만들면 아래와 같이 SerivceBase를 상속받는 cs파일로 생성이됩니다. 서비스 시작,종료시에 아래 함수가 호출되니 해당시점에 필요한 동작에 코드를 작성해두면 됩니다. 아래 코드의 경우는 시작,종료시 로그파일에 서비스 시작,종료정보를 기록하도록 작성하였습니다.
OnStart : 서비스가 시작될때 호출됩니다.
OnStop : 서비스가 종료될때 호출됩니다.

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
namespace WindowsService1
{
    public partial class MyFirstService : ServiceBase
    {
        string mLogPath = @"C:\log\ServiceTest.log";
 
        public MyFirstService()
        {
            InitializeComponent();
        }
 
        protected override void OnStart(string[] args)
        {
            File.AppendAllText(mLogPath, $"{DateTime.Now.ToString()}:서비스를 시작하였습니다.\r\n");
        }
 
        protected override void OnStop()
        {
            File.AppendAllText(mLogPath, $"{DateTime.Now.ToString()}:서비스를 중지하였습니다\r\n");
        }
    }
}


6. InstallUtil.exe를 사용하여 윈도우 서비스등록
이제 마지막으로 빌드한 프로그램 exe파일을 서비스로 등록하면됩니다. InstallUtil.exe로 이용하여 등록이 가능하며 해당파일 경로는 C:\Windows\Microsoft.NET\Framework64\v4.0.30319 하위 폴더에 있으며 OS버전에 맞쳐서 실행하면됩니다.
도스창에서 InstallUtil.exe가 설치된 경로이동 하여 InstallUtil.exe "서비스프로그램경로" 명령을 실행하면 아래와 같이 서비스가 등록되는 부분을 확인 할 수 있습니다.

윈도우 서비스를 실행해서 ssproService가 생성된 부분을 확인 할 수 있습니다.

7. 윈도우 서비스 삭제방법
서비스 삭제하는 방법은 /u 옵션을 사용하여 삭제 처리합니다.InstallUtil.exe /u "서비스프로그램경로"