Windows Service

2007-10-05

Windows Service ![์‚ฌ์šฉ์ž ์‚ฝ์ž… ์ด๋ฏธ์ง€](http://ash84.net/wp-content/uploads/1/el123.JPG)

**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)](http://msdn2.microsoft.com/ko-kr/library/50614e95(VS.80).aspx)์˜ ํ˜ธ์ถœ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.** ** ** ** ** 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์„ ์ด์šฉํ•ด์„œ ์œˆ๋„์šฐ ์„œ๋น„์Šค ๋“ฑ๋ก ** ![์‚ฌ์šฉ์ž ์‚ฝ์ž… ์ด๋ฏธ์ง€](http://ash84.net/wp-content/uploads/1/gl123.JPG) Installutill /i MyWindowsService.exe : ์„œ๋น„์Šค ๋“ฑ๋ก Installutill /u MyWindowsService.exe : ์„œ๋น„์Šค ํ•ด์ œ