첫 번째 Windows Service

1. Windows 서비스 프로젝트 새로 만들기

  1. Visual Studio를 열고 새 프로젝트를 생성합니다
  2. 템플릿 선택:Visual C# → Windows → Windows 서비스
  3. 프로젝트 이름과 저장 경로를 설정한 후 확인을 클릭합니다

참고:최신 버전 Visual Studio는 이 템플릿을 더 이상 제공하지 않으며 .NET Framework 에서만 지원합니다. .NET Core/.NET 5 이상은 Worker Service 사용을 권장합니다.

2. 프로젝트 구조 설명

자동 생성되는 핵심 파일:

  1. Program.cs:프로그램 진입점
  2. Service1.cs:서비스 핵심 로직 클래스
1. Program.cs 진입 코드
static class Program
{
    static void Main()
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
            new Service1()
        };
        ServiceBase.Run(ServicesToRun);
    }
}Code language: JavaScript (javascript)

역할:서비스 호스트를 시작하고 하나 이상의 서비스 인스턴스를 로드합니다.

2. Service1.cs 서비스 메인 클래스
public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    // 【서비스 시작 시 실행】
    protected override void OnStart(string[] args)
    {

    }

    // 【서비스 정지 시 실행】
    protected override void OnStop()
    {

    }
}
  • OnStart:서비스 시작 시 호출, 비즈니스 로직을 작성합니다
  • OnStop:서비스 정지 시 호출, 리소스 해제에 사용합니다

3. 설치 프로그램 추가

이 단계는 필수입니다. 이 작업을 하지 않으면 시스템 서비스에 등록할 수 없습니다.

작업 단계
  1. Service1 디자인 뷰 화면에서 마우스 오른쪽 클릭 → 설치 프로그램 추가
  2. Visual Studio가 자동으로 ProjectInstaller.cs 를 생성하며 두 개의 핵심 컴포넌트가 포함됩니다:
    • serviceInstaller1
    • serviceProcessInstaller1

컴포넌트 속성 설정

  1. serviceInstaller1(서비스 정보 설정)
    • ServiceName:코드 내부에서 사용하는 서비스 이름
    • DisplayName:서비스 관리자에 표시되는 이름
    • Description:서비스 설명
    • StartType:시작 유형 Manual(수동)/Automatic(자동)
  2. serviceProcessInstaller1(실행 계정 설정)
    • Account:실행 신원
    • LocalSystem:로컬 시스템 계정(권한 최고, 테스트용 권장)
    • User:지정한 Windows 계정(기본값, 계정 비밀번호 입력 필요)

4. 테스트 비즈니스 로직 작성

비즈니스 코드는 Service1 안에 작성합니다. Windows 서비스는 디버깅하기 어려우므로 임시로 로그 출력으로 검증합니다. 서비스는 설치 및 제거 과정이 필요합니다.

Service1.cs 수정

using System.IO;

protected override void OnStart(string[] args)
{
    // 시작 시 로그 기록
    File.AppendAllText("log.txt", "시작 시간:" + DateTime.Now + Environment.NewLine);
}

protected override void OnStop()
{
    // 정지 시 로그 기록
    File.AppendAllText("log.txt", "정지 시간:" + DateTime.Now + Environment.NewLine);
}Code language: JavaScript (javascript)

5. 컴파일, 설치, 서비스 시작

  1. 프로젝트를 빌드하고 WindowsServiceDemo.exe 파일을 얻습니다
  2. InstallUtil.exe 를 사용하여 서비스 등록(관리자 권한 CMD)
# 서비스 설치
InstallUtil.exe WindowsServiceDemo.exe

# 서비스 제거
InstallUtil.exe /u WindowsServiceDemo.exeCode language: PHP (php)
  1. 서비스 관리자 services.msc 를 열고 서비스를 찾아 시작/정지 후 로그를 확인합니다

서비스는 일반 프로그램처럼 직접 실행하거나 디버깅할 수 없으며 전용 도구로 설치해야 합니다.

주의사항

  1. F5 직접 디버깅 불가:Windows 서비스는 직접 디버깅할 수 없습니다. 이중 모드를 구현하여 명령줄 실행 시 콘솔 앱으로 동작하고 설치 후 서비스로 실행하는 방식을 권장합니다.
  2. 경로 문제:상대 경로는 정상 동작하지 않으므로 절대 경로를 사용하세요.
  3. 권한 문제:실행 계정에 따라 디스크, 네트워크, 공유 폴더 접근 권한이 달라집니다.
  4. 시작 시간 초과OnStart 내에서 오랫동안 블로킹되면 시스템이 시작 실패로 판단합니다. 오래 걸리는 작업은 별도 스레드에서 실행하세요.

첫 번째 Windows Service

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다