Windows Service

2007-10-05

Windows Service


์‚ฌ์šฉ์ž ์‚ฝ์ž… ์ด๋ฏธ์ง€ย 


**Windows Service ๋ž€?** โ€“ ์—ฌ๋Ÿฌ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋กœ ์šด์˜ํ•˜๋Š” ๊ฒƒ โ€“ exe, dll์ด ์•„๋‹ˆ๋ผ os๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์‹คํ–‰ โ€“ ๊ตฌ์„ฑ์š”์†Œ์˜ ์„œ๋น„์Šค ๋ชฉ๋ก์— ๋‚˜์—ด๋˜์–ด ์žˆ์Œ

ย 

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 OnStart(string[] args)

โ€“ protected override void OnStop()

ย ย  < ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ>
ย 

โ€“ protected override void OnPause()

โ€“ protected override void OnContinue()

ย  ย  ย  ย  ย  ย  ย  ย  ์†์„ฑ\(True)>

ย 

ย 

ย 

ย 

ย 

ย  ย  ย  ย  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();

ย  ย  ย  ย  }

ย 

ย 

*** Windows Service Event โ€“ ์„œ๋น„์Šค์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค. ** **ย ** Start : OnStart( ), ServiceStarmode(Automatic, manual, Disabled) : ์–ด๋–ค์‹์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€ Stop : OnStop( ) Pause : OnPause( ) , ์‹œ์Šคํ…œ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋”ฐ๋กœ ๋ณด์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. Continue : OnContinue( ), OnPause์™€์˜ ๋ฐ˜๋Œ€ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ• ์ˆ˜ ์žˆ๋‹ค.


ย 

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 : ์„œ๋น„์Šค ํ•ด์ œ

#c#  #dev  #Installtutil  #System.ComponentModel  #System.Configuration.Install  #System.ServiceProcess  #Windows Service  #์„œ๋น„์Šค๋“ฑ๋ก