서비스 설치와 제거

Windows 서비스: InstallUtil.exe 명령줄로 설치·제거하기 및 자주 발생하는 문제 해결

1. 명령줄로 Windows 서비스 설치 및 제거

1. 도구

마이크로소프트는 .NET Windows 서비스 설치와 제거를 위해 InstallUtil.exe를 제공합니다.

  1. InstallUtil.exe는 .NET Framework 버전에 따라 달라집니다. 도구 버전이 프로젝트 대상 프레임워크와 맞지 않으면 설치가 실패합니다;
  2. 해당 버전의 InstallUtil.exe를 서비스 프로그램 Debug 출력 폴더(서비스 exe와 같은 위치)에 복사하십시오.

InstallUtil은 .NET SDK의 일부이므로 설치한 SDK 버전마다 다른 InstallUtil이 제공됩니다.

.NET Framework 4.0 / 4.5 / 4.6 / 4.7 / 4.8(가장 많이 사용됨)은 32비트와 64비트가 구분됩니다.

64비트 예시 경로:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe

.NET 5 /.NET 6 /.NET 7 /.NET 8 /.NET 9(.NET Core 계열)에는 InstallUtil.exe가 포함되지 않습니다

2. 파일 폴더 구조(Debug 폴더)
WindowsServiceDemo.exe       // Windows 서비스 주 실행 파일
WindowsServiceDemo.pdb
InstallUtil.exe             // 복사해온 설치 도구
install.bat                 // 설치 스크립트
uninstall.bat               // 제거 스크립트
log.txtCode language: JavaScript (javascript)
3. 배치 스크립트 작성

install.bat 【서비스 설치】

d:
cd D:\WindowsService3\WindowsService3\bin\Debug
InstallUtil WindowsServicePicture.exe
pauseCode language: CSS (css)

uninstall.bat 【서비스 제거】

d:
cd D:\WindowsService3\WindowsService3\bin\Debug
InstallUtil /u WindowsServicePicture.exe
pause

매개변수 설명:/u = uninstall, 서비스 제거를 의미합니다

마우스 오른쪽 버튼 클릭 후 관리자 권한으로 CMD 실행 / bat 파일을 관리자로 직접 실행해야 합니다. 권한이 부족하면 보안 예외가 발생하고 설치는 실패한 뒤 자동 롤백됩니다.

2. Windows 서비스 설치 시 자주 발생하는 문제와 해결 방안

근본 원인 정리

설치 실패는 크게 두 가지 주요 원인이 있습니다:

  1. 서비스 프로젝트 컴파일 플랫폼, .NET 버전과 InstallUtil.exe 버전이 불일치;
  2. 관리자 권한이 없어 시스템 보안 차단이 작동하는 경우。
예외1:BadImageFormatException

오류 메시지

System.BadImageFormatException: 파일 또는 어셈블리 "WindowsServiceDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 또는 해당 종속성 중 하나를 로드할 수 없습니다. 잘못된 형식의 프로그램을 로드하려고 했습니다.Code language: JavaScript (javascript)

원인
프로젝트 컴파일 대상 플랫폼(x86/x64/AnyCPU)과 InstallUtil.exe 비트 버전이 맞지 않거나 .NET 버전이 호환되지 않습니다。
해결 방법

  1. 프로젝트 설정을 x86으로 변경하여 컴파일;
  2. 프로젝트 프레임워크 버전에 맞는 InstallUtil.exe 사용;
예외2:SecurityException 보안 권한 예외(자주 발생)

오류 메시지

설치 단계에서 예외가 발생했습니다.
System.Security.SecurityException: 원본을 찾지 못했지만 일부 또는 모든 이벤트 로그를 검색할 수 없습니다. 액세스할 수 없는 로그: Security.

설치의 롤백 단계를 시작합니다.
설치가 실패했으며 롤백이 수행되었습니다.Code language: CSS (css)

전체 로그 파일 경로 예시:

H:\프로젝트소스\WindowsServiceDemo\WindowsServiceDemo\bin\Debug\WindowsServiceDemo.InstallLogCode language: CSS (css)

근본 원인
명령줄 또는 Visual Studio를 관리자 권한으로 실행하지 않아 시스템 이벤트 로그 읽기·쓰기가 불가능합니다.

표준 해결 방안

  1. Visual Studio:오른쪽 클릭【관리자 권한으로 실행】후 프로젝트를 다시 빌드;
  2. CMD / bat 스크립트:오른쪽 클릭 → 관리자 권한으로 실행
  3. 프로젝트 컴파일 플랫폼을 x86으로 선택하여 빌드。
설치 성공 확인 기준

콘솔 출력:

커밋 단계가 정상적으로 완료되었습니다.
트랜잭션 처리 설치가 완료되었습니다.

이제 Windows 서비스 목록(services.msc)을 열면 등록된 서비스를 확인할 수 있습니다.

서비스 설치와 제거

답글 남기기

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