본문 바로가기

C#

구성 요소 디자이너에서 Windows 서비스 응용 프로그램 만들기

반응형

이 항목의 연습에서는 이벤트 로그에 메시지를 작성하는 간단한 Windows 서비스 응용 프로그램을 만드는 방법을 보여 줍니다. 서비스를 만들고 사용하기 위해 수행할 기본 단계는 다음과 같습니다.

  • Windows 서비스 응용 프로그램 템플릿을 사용하여 프로젝트를 만듭니다. 이 템플릿을 사용하면 ServiceBase에서 상속되어 서비스 시작 코드와 같은 기본 서비스 코드의 대부분을 자동으로 작성하는 클래스가 생성됩니다.

  • OnStartOnStop 프로시저에 대한 코드를 작성하고 다시 정의할 다른 메서드를 재정의합니다.

  • 서비스 응용 프로그램에 필요한 설치 관리자를 추가합니다. 기본적으로 설치 관리자 추가 링크를 클릭하면 프로세스를 설치하기 위한 설치 관리자와 프로젝트에 포함된 관련 서비스 각각을 위해 사용되는 설치 관리자 등 두 개 이상의 설치 관리자가 들어 있는 클래스가 응용 프로그램에 추가됩니다.

  • 프로젝트를 빌드합니다.

  • 서비스를 설치하기 위한 설치 프로젝트를 만들고 설치합니다.

  • Windows 2000 서비스 제어 관리자에 액세스하여 서비스를 시작합니다.

우선 프로젝트를 만들고 서비스가 제대로 작동하는 데 필요한 값을 설정합니다.

참고:

다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

서비스를 만들고 구성하려면

  1. 파일 메뉴에서 새 프로젝트를 클릭합니다.

    새 프로젝트 대화 상자가 열립니다.

  2. Visual Basic, Visual C#, Visual C++ 또는 Visual J# 프로젝트 템플릿 목록에서 Windows 서비스 프로젝트를 선택한 다음 이름을 MyNewService로 지정합니다. 확인을 클릭합니다.

    참고:

    프로젝트 템플릿은 System.ServiceProcess.ServiceBase에서 상속된 Service1이라는 구성 요소 클래스를 자동으로 추가합니다.

  3. 디자이너를 클릭하여 Service1을 선택합니다. 그런 다음 속성 창에서 Service1에 대한 ServiceName(이름) 속성을 MyNewService로 설정합니다.

  4. AutoLog 속성을 true로 설정합니다.

  5. 보기 메뉴에서 코드를 클릭하여 코드 편집기를 엽니다. Main 메서드를 편집하여 MyNewService의 인스턴스를 만듭니다. 3단계에서 서비스 이름을 변경할 때 Main 메서드에서는 클래스 이름이 수정되지 않았습니다. Visual C# 및 Visual J# 응용 프로그램에서 Main 메서드는 각각 Program.cs 및 Program.js 파일에 있습니다.

    VB
    ' To access the Main method in Visual Basic, select Main from the
    ' method name drop-down list. This expands the Component Designer 
    ' generated code region.
    Shared Sub Main()
      Dim ServicesToRun() As System.ServiceProcess.ServiceBase
      ' Change the following line to match.
      ServicesToRun = New System.ServiceProcess.ServiceBase() _
          {New MyNewService()}
      System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    End Sub
    
    
    
    J#
    	public static void main(String[] args)
    	{
    		System.ServiceProcess.ServiceBase[] ServicesToRun;
    		ServicesToRun = new System.ServiceProcess.ServiceBase[] 
    		  { new MyNewService() };
    		System.ServiceProcess.ServiceBase.Run(ServicesToRun);
    	}
    
    
    

다음 단원에서는 Windows 서비스에 사용자 지정 이벤트 로그를 추가합니다. 이벤트 로그는 Windows 서비스와 연관이 없으며, 여기에서는 단지 Windows 서비스에 추가할 수 있는 구성 요소 종류의 한 예로 EventLog 구성 요소를 사용합니다. 사용자 지정 이벤트 로그에 대한 자세한 내용은 방법: 사용자 지정 이벤트 로그 만들기 및 제거를 참조하십시오.

사용자 지정 이벤트 로그 기능을 서비스에 추가하려면

  1. 솔루션 탐색기에서 Service1.vb, Service1.cs 또는 Service1.jsl을 마우스 오른쪽 단추로 클릭하고 디자이너 보기를 선택합니다.

  2. 도구 상자구성 요소 탭에서 EventLog 구성 요소를 디자이너로 끌어 옵니다.

  3. 솔루션 탐색기에서 Service1.vb, Service1.cs 또는 Service1.jsl을 마우스 오른쪽 단추로 클릭하고 코드 보기를 선택합니다.

  4. 사용자 지정 이벤트 로그를 정의하는 생성자를 편집합니다.

    VB
    ' To access the constructor in Visual Basic, select New from the
    ' method name drop-down list. 
    Public Sub New()
      MyBase.New()
      InitializeComponent()
      If Not System.Diagnostics.EventLog.SourceExists("MySource") Then
          System.Diagnostics.EventLog.CreateEventSource("MySource", _
          "MyNewLog")
      End If
      EventLog1.Source = "MySource"
      EventLog1.Log = "MyNewLog"
    End Sub
    
    
    
    J#
    	public MyNewService()
    	{
    		InitializeComponent();
    		if (!System.Diagnostics.EventLog.SourceExists("MySource"))
    		{
    			System.Diagnostics.EventLog.CreateEventSource(
    					"MySource", "MyNewLog");
    		}
    		eventLog1.set_Source("MySource");
    		eventLog1.set_Log("MyNewLog");
    	}
    
    
    

서비스가 시작될 때 수행되는 동작을 정의하려면

  • 프로젝트를 만들 때 자동으로 재정의된 OnStart 메서드를 코드 편집기에서 찾은 다음 서비스가 실행될 때 수행해야 할 작업을 결정하는 코드를 작성합니다.

    VB
    ' To access the OnStart in Visual Basic, select OnStart from the
    ' method name drop-down list. 
    Protected Overrides Sub OnStart(ByVal args() As String)
      EventLog1.WriteEntry("In OnStart")
    End Sub
    
    
    
    J#
    	protected void OnStart(String[] args)
    	{
    		eventLog1.WriteEntry("In OnStart");
    	}
    
    
    
    참고:

    서비스 응용 프로그램은 장기 실행 응용 프로그램으로 디자인되어 있습니다. 따라서 서비스 응용 프로그램은 대개 시스템에서 정보를 폴링하거나 모니터링합니다. 모니터링은 OnStart 메서드에서 설정됩니다. 그러나 OnStart에서 실제로 모니터링을 수행하지는 않습니다. 서비스의 작업이 시작되고 나면 OnStart 메서드가 운영 체제에 반환되어야 하며 무제한 순환하거나 방해가 되어서는 안 됩니다. 간단한 폴링 메커니즘을 설정하려면 System.Timers.Timer 구성 요소를 사용합니다. OnStart 메서드에서 구성 요소에 대한 매개 변수를 설정한 다음 Enabled 속성을 true로 설정합니다. 그러면 타이머가 코드에서 주기적으로 이벤트를 발생시키며 그러는 동안에도 서비스에서는 모니터링을 수행할 수 있습니다.

서비스가 중단될 때 수행되는 동작을 정의하려면

  • 코드 편집기의 메서드 이름 드롭다운 목록에서 프로젝트를 만들 때 자동으로 재정의된 OnStop 프로시저를 선택합니다. 서비스가 중지되었을 때 수행해야 할 작업을 결정하는 코드를 작성합니다.

    VB
    Protected Overrides Sub OnStop()
      EventLog1.WriteEntry("In OnStop.")
    End Sub
    
    
    
    J#
    	protected void OnStop()
    	{
    		eventLog1.WriteEntry("In onStop.");
    	}
    
    
    

OnPause, OnContinueOnShutdown 메서드를 재정의하여 구성 요소에 대한 처리 작업을 추가로 정의할 수 있습니다.

서비스의 다른 동작을 정의하려면

  • 처리할 메서드에 대해 적절한 메서드를 재정의하고 수행할 동작을 정의합니다.

    OnContinue 메서드를 재정의할 경우 코드는 다음과 같습니다.

    VB
    Protected Overrides Sub OnContinue()
      EventLog1.WriteEntry("In OnContinue.")
    End Sub
    
    
    
    J#
    	protected void OnContinue()
    	{
    		eventLog1.WriteEntry("In OnContinue.");
    	}
    
    
    

Windows 서비스를 설치할 때 수행되어야 하는 몇 가지 사용자 지정 작업을 Installer 클래스에서 수행할 수 있습니다. Visual Studio에서 특별히 Windows 서비스를 위해 이러한 설치 관리자를 만들어 프로젝트에 추가할 수 있습니다.

서비스를 위한 설치 관리자를 만들려면

  1. 솔루션 탐색기에서 Service1.vb, Service1.cs 또는 Service1.jsl을 마우스 오른쪽 단추로 클릭하고 디자이너 보기를 선택합니다.

  2. 디자이너의 배경을 클릭하여 서비스 내용이 아닌 서비스 자체를 선택합니다.

  3. 디자이너에 포커스가 있는 상태에서 설치 관리자 추가를 클릭합니다.

    기본적으로 설치 관리자가 두 개 들어 있는 구성 요소 클래스가 프로젝트에 추가됩니다. 구성 요소의 이름이 ProjectInstaller로 지정되며 구성 요소에는 서비스를 위한 설치 관리자와 서비스 관련 프로세스를 위한 설치 관리자가 들어 있습니다.

  4. ProjectInstaller디자인 뷰에서 ServiceInstaller1 또는 serviceInstaller1을 클릭합니다.

  5. 속성 창에서 ServiceName 속성을 MyNewService로 설정합니다.

  6. StartType 속성을 Automatic으로 설정합니다.

  7. 디자이너에서 ServiceProcessInstaller1(Visual Basic 프로젝트의 경우) 또는 serviceProcessInstaller1(Visual C# 또는 Visual J# 프로젝트의 경우)을 클릭합니다. Account 속성을 LocalService로 설정합니다. 이렇게 하면 서비스가 로컬 서비스 계정으로 설치되고 실행됩니다.

    보안 정보:

    LocalService 계정은 로컬 컴퓨터에서 권한이 없는 사용자로 동작하며 원격 서버에 익명 자격 증명을 제공합니다. 다른 계정을 사용할 경우에는 더 많은 권한과 함께 실행되어 악의적인 코드로부터 공격을 받을 가능성이 커지므로 주의해야 합니다.

서비스 프로젝트를 빌드하려면

  1. 솔루션 탐색기에서 프로젝트를 오른쪽 마우스 단추로 클릭하고 속성을 클릭합니다. 프로젝트의 속성 디자이너가 나타납니다.

  2. 응용 프로그램 페이지의 시작 개체 목록에서 MyNewService를 클릭합니다.

  3. Ctrl+Shift+B를 눌러 프로젝트를 빌드합니다.

프로젝트를 빌드했으므로 이제 배포할 수 있습니다. 설치 프로젝트에서는 컴파일된 프로젝트 파일을 설치하고 Windows 서비스를 실행하는 데 필요한 설치 관리자를 실행합니다. 완전한 설치 프로젝트를 만들려면 프로젝트 출력 MyNewService.exe를 설치 프로젝트에 추가한 다음 MyNewService.exe를 설치하기 위한 사용자 지정 작업을 추가합니다. 설치 프로젝트에 대한 자세한 내용은 설치 프로젝트를 참조하십시오. 사용자 지정 작업에 대한 자세한 내용은 연습: 사용자 지정 작업 만들기를 참조하십시오.

서비스에 대한 설치 프로젝트를 만들려면

  1. 솔루션 탐색기에서 솔루션을 마우스 오른쪽 단추로 클릭하여 선택하고 추가를 가리킨 다음 새 프로젝트를 클릭합니다.

  2. 프로젝트 형식 창에서 설치 및 배포 프로젝트 폴더를 선택합니다.

  3. 템플릿 창에서 설치 프로젝트를 선택합니다. 프로젝트 이름을 MyServiceSetup으로 지정합니다. 확인을 클릭합니다.

    설치 프로젝트가 솔루션에 추가됩니다.

다음 단계로 Windows 서비스 프로젝트의 출력인 MyNewService.exe를 설치 프로젝트에 추가합니다.

MyNewService.exe를 설치 프로젝트에 추가하려면

  1. 솔루션 탐색기에서 MyServiceSetup을 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 프로젝트 출력을 클릭합니다.

    프로젝트 출력 그룹 추가 대화 상자가 나타납니다.

  2. 프로젝트 상자에서 MyNewService가 선택되어 있습니다.

  3. 목록에서 기본 출력을 선택한 다음 확인을 클릭합니다.

    MyNewService의 기본 출력으로 사용할 프로젝트 항목이 설치 프로젝트에 추가됩니다.

이제 MyNewService.exe 파일을 설치하기 위한 사용자 지정 작업을 추가합니다.

사용자 지정 작업을 설치 프로젝트에 추가하려면

  1. 솔루션 탐색기에서 설치 프로젝트를 마우스 오른쪽 단추로 클릭하고 보기를 가리킨 다음 사용자 지정 작업을 클릭합니다.

    사용자 지정 작업 편집기가 나타납니다.

  2. 사용자 지정 작업 편집기에서 사용자 지정 작업 노드를 마우스 오른쪽 단추로 클릭한 다음 사용자 지정 작업 추가를 클릭합니다.

    프로젝트에서 항목 선택 대화 상자가 나타납니다.

  3. 목록에서 응용 프로그램 폴더를 두 번 클릭하여 열고 MyNewService의 기본 출력(활성)을 선택한 다음 확인을 클릭합니다.

    기본 출력이 사용자 지정 작업의 네 가지 노드인 설치, 커밋, 롤백설치 제거에 모두 추가됩니다.

  4. 솔루션 탐색기에서 MyServiceSetup 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 빌드를 클릭합니다.

Windows 서비스를 설치하려면

  1. MyNewService.exe를 설치하려면 솔루션 탐색기에서 설치 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 설치를 선택합니다.

  2. 설치 마법사의 단계별 지침을 따릅니다. 솔루션을 빌드하고 저장합니다.

서비스를 시작하고 중지하려면

  1. 다음 중 한 가지 방법으로 서비스 제어 관리자를 엽니다.

    • Windows XP 및 2000 Professional에서 바탕 화면의 내 컴퓨터를 마우스 오른쪽 단추로 클릭한 다음 관리를 클릭합니다. 컴퓨터 관리 콘솔에서 서비스 및 응용 프로그램 노드를 확장합니다.

      -또는-

    • Windows Server 2003 및 Windows 2000 Server에서는 시작을 클릭하고 프로그램을 가리킨 다음 관리 도구서비스를 차례로 클릭합니다.

      참고:

      Windows NT 4.0에서는 제어판에서 이 대화 상자를 열 수 있습니다.

    창의 서비스 영역에 MyNewService가 나타납니다.

  2. 목록에서 서비스를 선택하고 마우스 오른쪽 단추로 클릭한 다음 시작을 클릭합니다.

  3. 서비스를 마우스 오른쪽 단추로 클릭한 다음 중지를 클릭합니다.

서비스의 이벤트 로그 출력을 확인하려면

  1. 서버 탐색기를 열고 이벤트 로그 노드에 액세스합니다. 자세한 내용은 방법: 서버 탐색기에서 이벤트 로그 사용을 참조하십시오.

    참고:

    Visual Studio Standard Edition에서는 Windows 서비스 템플릿과 관련 기능을 사용할 수 없습니다.

  2. MyNewLog에 대한 목록을 찾아 확장합니다. 서비스에서 수행한 동작이 나열된 것을 볼 수 있습니다.

서비스를 제거하려면

  1. 시작 메뉴에서 제어판을 열고 프로그램 추가/제거를 클릭한 다음 서비스를 찾아 제거를 클릭합니다.

  2. .msi 파일의 프로그램 아이콘을 마우스 오른쪽 단추로 클릭한 다음 제거를 선택하여 프로그램을 제거할 수도 있습니다.

    참고:

    Windows 2000에 서비스를 설치한 경우 서비스를 다시 설치하려면 시스템을 다시 시작해야 합니다. Windows 2000에서는 시스템이 다시 부팅되어야만 서비스가 완전히 삭제됩니다.

 

출처 : http://msdn.microsoft.com/ko-kr/library/zt39148a(v=vs.90).aspx

반응형