1. Windows 서비스 프로젝트 새로 만들기
- Visual Studio를 열고 새 프로젝트를 생성합니다
- 템플릿 선택:Visual C# → Windows → Windows 서비스
- 프로젝트 이름과 저장 경로를 설정한 후 확인을 클릭합니다
참고:최신 버전 Visual Studio는 이 템플릿을 더 이상 제공하지 않으며 .NET Framework 에서만 지원합니다. .NET Core/.NET 5 이상은
Worker Service사용을 권장합니다.
2. 프로젝트 구조 설명
자동 생성되는 핵심 파일:
- Program.cs:프로그램 진입점
- 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. 설치 프로그램 추가
이 단계는 필수입니다. 이 작업을 하지 않으면 시스템 서비스에 등록할 수 없습니다.
작업 단계
Service1디자인 뷰 화면에서 마우스 오른쪽 클릭 → 설치 프로그램 추가- Visual Studio가 자동으로
ProjectInstaller.cs를 생성하며 두 개의 핵심 컴포넌트가 포함됩니다:serviceInstaller1serviceProcessInstaller1

컴포넌트 속성 설정
- serviceInstaller1(서비스 정보 설정)
ServiceName:코드 내부에서 사용하는 서비스 이름DisplayName:서비스 관리자에 표시되는 이름Description:서비스 설명StartType:시작 유형Manual(수동)/Automatic(자동)
- 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. 컴파일, 설치, 서비스 시작
- 프로젝트를 빌드하고
WindowsServiceDemo.exe파일을 얻습니다 InstallUtil.exe를 사용하여 서비스 등록(관리자 권한 CMD)
# 서비스 설치
InstallUtil.exe WindowsServiceDemo.exe
# 서비스 제거
InstallUtil.exe /u WindowsServiceDemo.exeCode language: PHP (php)
- 서비스 관리자
services.msc를 열고 서비스를 찾아 시작/정지 후 로그를 확인합니다
서비스는 일반 프로그램처럼 직접 실행하거나 디버깅할 수 없으며 전용 도구로 설치해야 합니다.
주의사항
- F5 직접 디버깅 불가:Windows 서비스는 직접 디버깅할 수 없습니다. 이중 모드를 구현하여 명령줄 실행 시 콘솔 앱으로 동작하고 설치 후 서비스로 실행하는 방식을 권장합니다.
- 경로 문제:상대 경로는 정상 동작하지 않으므로 절대 경로를 사용하세요.
- 권한 문제:실행 계정에 따라 디스크, 네트워크, 공유 폴더 접근 권한이 달라집니다.
- 시작 시간 초과:
OnStart내에서 오랫동안 블로킹되면 시스템이 시작 실패로 판단합니다. 오래 걸리는 작업은 별도 스레드에서 실행하세요.
첫 번째 Windows Service
Previous: Windows 서비스
Next: 서비스 설치와 제거