สร้าง Windows Service และ Installer สำหรับติดตั้งใช้งาน
เมื่อ : 5-มิ.ย.-55 12:14
อ่าน : 352 ครั้ง
Tag : c# windows-service
Windows services เป็น processes ที่ทำงานใน background ไม่มี user interface ที่ติดต่อกับผู้ใช้ Windows Service สามารถเริ่มทำงานโดยอัตโนมัติเมื่อคอมพิวเตอร์เริ่มทำงาน แม้ว่าผู้ใช้จะยังไม่ได้ log in เข้าไปใช้งานก็ตาม ดังนั้น Windows Service จึงเหมาะสำหรับงานที่มีการทำงานอยู่ตลอดเวลา และไม่ต้องการติดต่อกับผู้ใ้ช้โดยตรง เช่น Web Server, Database Server
โดยในวันนี้เราจะมาสร้าง Windows Service อย่างง่าย โดยทำงานตรวจสอบสถานะการทำงานของเว็บไซด์แล้วเก็บข้อมูลลง text ไฟล์
สร้าง Service Project
1. เปิด Visual Studio สร้าง Windows Service project ตั้งชื่อว่า MonitorWebSite
2.เลือก service designer view เปลี่ยน Name และ ServiceName เป็น MonitorWebsite พร้อมทั้งกำหนดค่า CanPuaseAndContinue และ CanShutDown เป็น True
3.เพิ่ม System.Timers, System.IO, และ System.Net namespaces เข้าไปใน Service1.cs ด้วยคำสั่งต่อไปนี้
4. แก้ไข MonitorWebSite class โดยเพิ่มคำสั่งในการสร้าง Timer object ด้วยคำสั่งดังต่อไปนี้
5. ภายใน MonitorWebSite contructor ทำการสร้าง Timer object และกำหนดให้ Timer เรียกใช้เมธอดทุกๆ 10 วินาที ด้วยคำสั่งต่อไปนี้
2 | t.Elapsed += new ElapsedEventHandler(t_Elapsed); |
6. เพิ่มคำสั่งเข้าไปในเมธอด OnStart ของ MonitorWebSite class เพื่อสั่งให้ Timer เริ่มทำงาน ด้วยคำสั่งต่อไปนี้
7. เพิ่มคำสั่งเข้าไปในเมธอด OnStop ของ MonitorWebSite class เพื่อสั่งให้ Timer หยุดทำงาน ด้วยคำสั่งต่อไปนี้
8. ทำการ override เมธอด OnPause, OnContinue และ OnShutdown เพิ่มคำสั่งเพื่อสั่งให้ Timer เริ่มและหยุดการทำงาน ด้วยคำสั่งต่อไปนี้
01 | protected override void OnContinue() |
05 | protected override void OnPause() |
09 | protected override void OnShutdown() |
9. ภายในเมธอดที่ได้ระบุไว้เป็น ElapsedEventHandler ให้ทำการเขียนคำสั่งเพื่อตรวจสอบสถานะของเว็บไซด์และเขียนเวลาปัจจุบันและสถานะการทำงานของเว็บลงใน text ไฟล์
พร้อมทั้งดักจับความผิดพลาดที่เกิดขึ้นจากการทำงานด้วย exception handler คำสั่งที่ได้เป็นดังนี้
01 | void t_Elapsed( object sender, ElapsedEventArgs e) |
07 | var g = (HttpWebRequest)WebRequest.Create(url); |
08 | var r = (HttpWebResponse)g.GetResponse(); |
10 | var text = string .Format( "{0} for {1} : {2}" , DateTime.Now, url, r.StatusCode); |
12 | WriteTextToFile(text); |
19 | var text = string .Format( "{0} Exception: {1}" ,DateTime.Now, ex.Message); |
23 | private void WriteTextToFile( string text) |
27 | AppDomain.CurrentDomain.SetupInformation.ApplicationBase + |
29 | TextWriter tw = new StreamWriter(path, true ); |
10. build project และแก้ไขความผิดพลาดที่เกิดขึ้น (compile time error) ตอนนี้เรายังไม่สามารถใช้งาน service ที่สร้างมาได้เนื่องจาก service ตัวนี้ยังไม่ได้ถูกติดตั้ง
สร้าง Service Installer สำหรับ service ที่ได้สร้างไว้แล้ว
1. เพิ่ม installer เข้าไปใน service project โดย click ขวาที่ service designer
2. ที่ ProjectInstaller Designer ให้ click เลือก serviceInstaller1 แล้วกด F4 เพื่อเรียก Properties Windows ขึ้นมา
แล้วกำหนด installer พร็อพเพอร์ตี้เป็นดังนี้
StartType Automatic.
Description “Logs responses from Microsoft.com”.
DisplayName “Web Site Monitor”.
รูปประกอบ
หลังจากนั้นให้ click เลือก serviceProcessInstaller1 แล้วกำหนดค่า propety Account เป็น LocalSystem. เพื่อให้มีสิทธิ์ในการเขียน text ไฟล์ได้
รูปประกอบ
3. กำหนดให้ service project เป็น startup object
1.เข้าไปที่ project properties windows
2. เลือก Application Tab
3. Startup object: ให้เลือก MonitorWebSite.Program
4. เพิ่ม Setup Project เข้าไปใน solution โดยไปที่ File > Add > New Project > Other Project Types > Setup and Deployment > Visual Studio Installer ตั้งชื่อ project ว่า
MonitorWebSiteSetup
แล้วทำการเพิ่ม output จาก service project ที่ได้สร้างไว้เข้าไปใน setup project
4.1 click ขวาที่ setup project แล้ว เลือก Add > Project Output
ที่ Add Project Output Group Windows
- เลือก MonitorWebSite Project
- เลือก Primary output
- click OK
5. เพิ่ม custom action สำหรับติดตั้ง service executable ไฟล์ใน application folder
เลือก setup uproject click ขวา เลือก View > Custom Actions
ที่ Custom Action editor แล้ว click ขวา Add Custom Action..
ที่ Select Item in Project Windows ให้ double click Application Folder
แล้วเลือก Primary output from MonitorWebSite (Active) แล้ว click OK
ผลลัพธ์ที่ได้
6. Build setup project
ติดตั้ง เริ่มการทำงานและจัดการกับ service ที่ได้สร้างไว้
1. double click Setup.exe ที่ได้สร้างไว้และทำการติดตั้ง Windows Service ด้วย default setting
2. เปิด Computer Management, และเลือก Services node.
3. Right-click Web Site Monitor service, แล้วเลือก Start. สังเกต Services snap-in แสดง Name และ Description ที่ได้กำหนดไว้ตอนสร้าง Service Project
4. รอประมาณ 30 วินาที แล้วำทำการเปิด text ไฟล์ ที่ทำการ log ข้อมูลการทำงานของเว็บไซด์
ข้อมูลใน log.txt
5. หยุดการทำงานของ service ชั่วคราวรอประมาณ 30 วินาที แล้วตรวจดูว่าจะไม่มีข้อมูลใหม่เพิ่มเข้าไปใน log ไฟล์
6. เปิดให้ service ทำงานต่อ, รอประมาณ 30 วินาที ตรวจดูว่าใน log ไฟล์มีข้อมูลใหม่เพิ่มเข้าไป
7. หยุดการทำงานของ service โดยใช้คำสั่ง net stop monitorwebsite ผ่าน command line
8. uninstall service ด้วยการ double click Setup.exe แล้วทำตามขั้นตอนในหน้า wizard ที่แสดงขึ้นมา
หวังว่าผู้อ่านจะได้รับความรู้เบื้องต้นในการสร้าง Windows Service นะครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น