Windows Service
Windows Service *응용프로그램 개발*
– Main( ), OnStart( ), OnStop( ) 이 필요
– 참조추가 :System.Service Process
**
**
**
**
1. Service *파일 : 서비스 동작을 하는 파일, ServiceBase 클래스를 확장한다. *
public static void Main()
{
System.ServiceProcess.ServiceBase[] ServiceToRun;
ServiceToRun = new ServiceBase[] { new Service() };
System.ServiceProcess.ServiceBase.Run(ServiceToRun);
}
ServiceBase class의 배열 인스턴스를 생성해서 현재 서비스 클래스를 추가한다.
(현재 ServiceBase class를 확장한 클래스를 추가하는 것)
2. Override Member *추가*
Protected형 멤버를 추가
– protected override void OnStop()
< 기본적으로 사용가능>
– protected override void OnContinue()
protected override void OnStop()
{
FileStream fs = new FileStream(@”c:\log_stop.txt”, FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs);
sr.WriteLine(“MYWindowsService stopped”);
sr.Flush();
sr.Close();
}
protected override void OnPause()
{
FileStream fs = new FileStream(@”c:\log_stop.txt”, FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs);
sr.WriteLine(“잠시중지“);
sr.Flush();
sr.Close();
}
* * Start : OnStart( ), ServiceStarmode(Automatic, manual, Disabled) : 어떤식으로 시작하는지 Stop : OnStop( ) Pause : OnPause( ) , 시스템의 리소스를 따로 보유할 수 있다. Continue : OnContinue( ), OnPause와의 반대 기능을 실행할수 있다.
* Windows Service Event – 서비스의 상태에 따라 달라진다.
3. ServiceInstaller, ServiceProcessInstaller *세팅*
– Service를 수행하는 클래스 외에 Installer 기능을 하는 하나의 클래스를 별로도
추가한다.
using System.ComponentModel;
using System.ServiceProcess;
using System.Configuration.Install;
namespace MyWindowsService
{
[RunInstallerAttribute(true)]
//어셈블리가 설치될 때 Visual Studio 사용자 지정 동작 설치 관리자 또는 설치관리자도구(Installutil.exe)의 호출 여부를 지정합니다.
**
**
public class ServiceInstallers : Installer
{
private ServiceInstaller serviceInstaller;
// *서비스응용프로그램을설치하는인스톨러*
private ServiceProcessInstaller serviceProcessInstaller;
// *서비스를운용하는프로세스를등록하는인스톨러*
public ServiceInstallers()
{
//생성자
this.serviceProcessInstaller = new ServiceProcessInstaller();
this.serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
**
**
//this.serviceProcessInstaller.Account = ServiceAccount.User;
//this.serviceProcessInstaller.Username = “Administrator”;
//this.serviceProcessInstaller.Password = “6750”;
// 계정과패스워드를정확히입력해야한다.
this.serviceInstaller = new ServiceInstaller();
this.serviceInstaller.ServiceName = “Service”;
// *시스템에서서비스이름으로식별한다. *
// *서비스이름은ServiceBase 를확장한클래스명이다. *
Installers.Add(serviceInstaller);
Installers.Add(serviceProcessInstaller);
**
**
}
}
}
4. cmd*에서 Installtutil을 이용해서 윈도우 서비스 등록
*
Installutill /i MyWindowsService.exe : 서비스 등록
Installutill /u MyWindowsService.exe : 서비스 해제