http://support.microsoft.com/kb/816169

 

이 문서에서는 Windows 서비스 응용 프로그램(이전에는 "NT 서비스"라 했음)을 위한 설치 프로젝트를 만드는 방법을 설명합니다. Windows 서비스 응용 프로그램을 위한 설치 프로젝트를 만들려면 먼저 응용 프로그램 로그에 항목을 기록하는 간단한 Windows 서비스 프로젝트가 들어 있는 솔루션을 만들어야 합니다. 그런 다음 설치 프로젝트를 솔루션에 추가하여 Window 서비스를 설치합니다. 마지막으로 Microsoft Visual Studio .NET 또는 Microsoft Visual Studio 2005 서버 탐색기에서 서비스를 시작합니다.

위로 가기

요구 사항
다음은 권장되는 하드웨어, 소프트웨어, 네트워크 인프라 및 필요한 서비스 팩 목록입니다.
  • Microsoft .NET Framework가 설치된 Microsoft Windows 2000 Professional, Microsoft Windows Server 2003, Microsoft Windows 2000 Server, Microsoft Windows XP Professional 또는 Microsoft Windows XP Server
  • Microsoft Visual Studio .NET Enterprise, Microsoft Visual Studio .NET Enterprise Architect 또는 Microsoft Visual Studio 2005
이 문서에서는 사용자가 Windows 서비스에 대해 잘 알고 있는 것으로 가정합니다. Windows 서비스에 대해 잘 모르는 경우 먼저 이 문서의 "참조" 절을 참조하십시오.
또한 이 문서에서는 이 서비스를 설치하고 실행하기 위해 사용하는 사용자 계정에 서비스를 설치하고 시작하는 데 필요한 권한과 이벤트 로그에 액세스하는 데 필요한 권한이 있다고 가정합니다.

위로 가기

Windows 서비스를 위한 설치 프로젝트 만들기
이 절에서는 Windows 서비스 프로젝트를 만들고 컴파일된 설치 프로젝트를 사용하여 Windows 서비스를 설치하는 방법을 설명합니다.
Windows 서비스 프로젝트 만들기
  1. Microsoft Visual Studio .NET 또는 Microsoft Visual Studio 2005를 시작합니다.
  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 누릅니다.
  3. 프로젝트 형식에서 Visual C# 프로젝트를 누른 다음 템플릿에서 Windows 서비스를 누릅니다.
    참고 Visual Studio 2005의 경우 프로젝트 형식에서 Visual C#을 확장하고 Windows를 누른 다음 템플릿에서 Windows 서비스를 누르십시오.
  4. 이름 입력란에 LogWriterService를 입력한 다음 위치 입력란에 C:\를 입력합니다. 확인을 누릅니다.
  5. 솔루션 탐색기에서 Service1.cs를 마우스 오른쪽 단추로 누른 다음 코드 보기를 누릅니다.
  6. OnStart 이벤트 처리기에서 설명을 다음 코드로 대체합니다.

    EventLog.WriteEntry("My simple service started.");

  7. 솔루션 탐색기에서 Service1.cs를 두 번 누릅니다.
  8. 코드 편집기 창에서 디자인 뷰를 마우스 오른쪽 단추로 누른 다음 속성을 누릅니다.
  9. 속성 창에서 설치 관리자 추가 링크를 누릅니다.
  10. ServiceInstaller1에 대한 속성 창에서 ServiceName 속성을 Service1로 변경합니다.
  11. 코드 편집기 창의 디자인 뷰에서 ServiceProcessInstaller1을 누릅니다.
  12. 속성 창에서 Account 속성을 LocalSystem으로 변경합니다. LocalServiceNetworkService 값은 Microsoft Windows XP에서만 사용할 수 있습니다.
컴파일된 설치 프로젝트를 사용하여 Windows 서비스 설치
앞의 절에 나와 있는 단계를 완료하여 Windows 서비스 프로젝트를 구성한 후 서비스 응용 프로그램을 설치할 수 있도록 서비스 응용 프로그램을 패키지하는 배포 프로젝트를 추가하려면 다음과 같이 하십시오.
  1. LogWriterService 프로젝트에 새 프로젝트를 추가합니다. 이렇게 하려면 다음과 같이 하십시오.
    1. 솔루션 탐색기에서 'LogWriterService' 솔루션(프로젝트: 1)을 마우스 오른쪽 단추로 누르고 추가를 가리킨 다음 새 프로젝트를 누릅니다.
    2. 프로젝트 형식에서 설치 및 배포 프로젝트를 누른 다음 템플릿에서 설치 프로젝트를 누릅니다.
    3. 이름 입력란에 ServiceSetup을 입력합니다.
    4. 위치 입력란에 C:\를 입력한 다음 확인을 누릅니다.
  2. 배포 프로젝트에 패키지할 내용을 지시합니다. 이렇게 하려면 다음과 같이 하십시오.
    1. 솔루션 탐색기에서 ServiceSetup을 마우스 오른쪽 단추로 누르고 추가를 가리킨 다음 프로젝트 출력을 누릅니다.
    2. 프로젝트 출력 그룹 추가 대화 상자의 프로젝트 상자에서 LogWriterService를 누릅니다.
    3. 기본 출력을 누른 다음 확인을 누릅니다.
  3. 올바른 설치를 위해 기본 출력만 추가합니다. 사용자 지정 작업을 추가하려면 다음과 같이 하십시오.
    1. 솔루션 탐색기에서 ServiceSetup을 마우스 오른쪽 단추로 누르고 보기를 가리킨 다음 사용자 지정 작업을 누릅니다.
    2. 사용자 지정 작업을 마우스 오른쪽 단추로 누른 다음 사용자 지정 작업 추가를 누릅니다.
    3. 응용 프로그램 폴더를 누른 다음 확인을 누릅니다.
    4. LogWriterService의 기본 출력(활성)을 누른 다음 확인을 누릅니다.
      기본 출력설치, 커밋, 롤백제거에 나타나는지 확인합니다.
  4. 설치 프로젝트는 기본적으로 빌드 구성에 포함되지 않습니다. 솔루션을 빌드하려면 다음 방법 중 하나를 사용하십시오.
    • 방법 1
      1. LogWriterService를 마우스 오른쪽 단추로 누른 다음 빌드를 누릅니다.
      2. ServiceSetup을 마우스 오른쪽 단추로 누른 다음 빌드를 누릅니다.
    • 방법 2
      1. 빌드 메뉴에서 구성 관리자를 눌러 전체 솔루션을 빌드합니다.
      2. ServiceSetup에 대해 빌드 확인란을 선택합니다.
      3. F7 키를 눌러 전체 솔루션을 빌드합니다. 솔루션이 빌드되면 서비스에 사용할 수 있는 전체 설치 패키지가 만들어진 것입니다.
  5. 새로 빌드한 서비스를 설치하려면 ServiceSetup을 마우스 오른쪽 단추로 누른 다음 설치를 누릅니다.
  6. ServiceSetup 대화 상자에서 다음을 차례로 세 번 누릅니다. 서비스가 설치되는 동안 진행률 표시기가 나타납니다.
  7. 서비스가 설치되면 닫기를 누릅니다.

위로 가기

전체 코드 예제
Service1.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;

namespace LogWriterService
{
	public class Service1 : System.ServiceProcess.ServiceBase
	{
		/// <summary> 
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Service1()
		{
			// The Windows.Forms Component Designer must have this call.
			InitializeComponent();

			// TODO: Add any initialization after the InitComponent call
		}

		// The main entry point for the process
		static void Main()
		{
			System.ServiceProcess.ServiceBase[] ServicesToRun;
	
			// More than one user service may run in the same process. To add
			// another service to this process, change the following line to
			// create a second service object. For example,
			//
			//   ServicesToRun = New System.ServiceProcess.ServiceBase[] {new Service1(), new MySecondUserService()};
			//
			ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() };

			System.ServiceProcess.ServiceBase.Run(ServicesToRun);
		}

		/// <summary> 
		/// Required method for Designer support - do not modify 
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			components = new System.ComponentModel.Container();
			this.ServiceName = "Service1";
		}

		/// <summary>
		/// Clean up any resources that are being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		/// <summary>
		/// Set things in motion so your service can do its work.
		/// </summary>
		protected override void OnStart(string[] args)
		{
			EventLog.WriteEntry("My simple service started.");
		}
 
		/// <summary>
		/// Stop this service.
		/// </summary>
		protected override void OnStop()
		{
			// TODO: Add code here to perform any tear-down necessary to stop your service.
		}
	}
}

위로 가기

작동 여부 확인
  1. 제어판에서 관리 도구를 두 번 누른 다음 서비스를 두 번 누릅니다.
  2. Service1을 마우스 오른쪽 단추로 누른 다음 시작을 누릅니다.
  3. 다음 방법 중 하나를 사용하여 이벤트 로그에 이벤트가 기록되었는지 확인합니다.
    • 방법 1
      1. 제어판에서 관리 도구를 두 번 누른 다음 이벤트 뷰어를 두 번 누릅니다.
      2. 왼쪽 창에서 응용 프로그램 로그를 누른 다음 오른쪽 창에서 해당 서비스의 이벤트 로그를 찾습니다.
    • 방법 2
      1. 서버 탐색기에서 서버, ComputerName, 이벤트 로그, 응용 프로그램Service1을 차례로 확장합니다. Service1은 서비스 자체가 아닌 클래스 이름입니다. 따라서 응용 프로그램 이름으로 Service1이 사용됩니다. 이름을 사용자 지정하는 방법은 이 문서에서 설명하지 않습니다.
      2. 커서를 로그 항목 위로 이동합니다. 맨 위에서 두 번째 항목이 "My simple service started"로 표시됩니다.

위로 가기

문제 해결
Framework SDK 설명서에 다음과 같은 내용이 있습니다.

프로젝트가 제대로 작동하려면 서비스 응용 프로그램 프로젝트에서 생성한 컴파일된 실행 파일이 서버에 설치되어 있어야 합니다. 서비스 응용 프로그램은 F5 또는 F11 키를 눌러 디버깅하거나 실행할 수 없으며 서비스를 즉시 실행하거나 서비스의 코드를 한 단계씩 실행할 수 없습니다. 대신 서비스를 설치하고 시작한 다음 서비스의 프로세스에 디버거를 연결해야 합니다.

자세한 내용은 다음 MSDN(Microsoft Developer Network) 웹 사이트를 참조하십시오.

Windows 서비스 응용 프로그램 디버깅
http://msdn2.microsoft.com/en-us/library/aa984342(VS.71).aspx (http://msdn2.microsoft.com/en-us/library/aa984342(VS.71).aspx) (영문)

+ Recent posts