การ Install/Uninstall โปรแกรม Windows Service ที่ได้จาก Visual Studio (VB.Net,C#) เนื่องจาก Windows Service ไม่สามารถรัน Application ได้จากการ Run ด้วยการคลิกหรือดับเบิ้ลคลิกเหมือนกับโปรแกรมอื่นๆ ที่วไป แต่มันจะทำงานภายใต้ระบบ Session ของ Windows ที่ถูกควบคุมด้วย Services Control Manager ถ้าจะให้ Windows Service นั้นๆ ทำได้อัตโนมัตตหลังจากที่ได้ทำการ Boot เครื่อง Computer หรือจะให้ทำการ Start แบบ Manual ซึงการทำงานทั้งหมดนี้จะถูกควบคุมด้วย Services Control Manager ของ Windows นั้นๆ และจำทำงานแบบ Session หรือ Background Process ที่ไม่แสดงผลออกทางหน้าจอให้ User ทราบ หรือพุดง่ายๆ เป็นโปรแกรมที่ทำงานอยู่เบื้องหลังที่ไม่มีใครรับรู้
และการที่เราจะนำโปรแกรม Windows Service ที่ได้เขียนมานั้นไปรันที่ Service ที่อยู่ภายใต้ Services Control Manager นั้น จะต้องทำการ Install/Uninstall เข้าไปในระบบ ซึ่งจะหลายๆ กับการ Register ตัว Service เขาระบบ Windows โดยรูแบบคำสั่งของการ Install และ Uninstall คือ
Install
InstallUtil.exe MyService.exe
Uninstall
InstallUtil.exe /u MyService.exe
โดยไฟล์ InstallUtil.exe จะอยู่ที่ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe ทั้งนี้ให้ดูที่ Version ของ .Net Framework ด้วย
มาดูตัวอย่างการทำระบบ Install และ Uninstall
protected override void OnStart(string[] args)
{
string strPath = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
System.IO.File.AppendAllLines(strPath, new[] { "Starting time : " + DateTime.Now.ToString() });
}
protected override void OnStop()
{
string strPath = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
System.IO.File.AppendAllLines(strPath, new[] { "Stop time : " + DateTime.Now.ToString() });
}
Code ใน Service จะมีการสร้าง Log.txt และเขียนข้อความเมื่อมีการ Start และ Stop ตัว Service
ในการใช้งานจริงส่วนของ Debug ที่เราได้เพิ่มไว้ก่อนหน้านี้ อาจจะต้องตัดออก ให้เหลือเฉพาะที่ใช้งาน
ทดสอบคลิกที่ MyService.exe เพื่อรันโปรแกรม
ตามที่ได้แจ้งไว้คือโปรแกรมประเภท Service จะไม่สามารถรันด้วยการคลิกเปิด
การทำระบบ Install บน Windows Service
คลิกที่ Service1.cs และเลือกมุมมองของการ Designer
คลิกขวาเลือก Add Installer
จะแสดงไฟล์ ProjectInstaller.cs ขึ้นมา และมี Control เกิดขึ้นมา 2 ตัวคือ serviceProcessInstaller กับ serviceInstaller
serviceProcessInstaller ให้กำหนด Account เป็น LocalService
serviceInstaller ให้กำหนด ServiceName ในที่นี้กำหนดเป็น ThaiCreate.Com Services
จากนั้นเลือก Rebuild เพื่อทำการ Build โปรแกรม
เปิดไฟล์ Browse ซึ่งโปรแกรมจะถูกจัดเก็บไว้ที่ bin\Debug
จะเห็นว่า Services ยังไมไ่ด้ถูกติดตั้ง เราจะต้องทำการรันเพื่อติดตั้งแบบ Manual ซะก่อน
การ Install ตัว Service
เปิด Command Prompt ให้ทำการ CD เข้าไปใน Path ที่จัดเก็บโปรแกรมที่ถูก Build ไว้
Command Prompt
CD C:\TestWinApp\MyService\MyService\bin\Debug
และดูว่าไฟล์ InstallUtil.exe อยู่ที่ไหนของ .Net Framework ในที่นี้อยู่ที่
Code
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe
รันคำสั่ง Install
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe MyService.exe
แสดงข้อความเมื่อ Service ทำการติดตั้งเรียบร้อยแล้ว
โปรแกรมจะสร้างไฟล์ Install Log เก็บไว้
เมื่อมาดูที่ Services Control Manager จะเห็นรายการ Services ทีไ่ด้ถูกติดตั้ง ซึ่งสถานะปัจจุบัน ยังเป็น Stop และ Manual แบบ Start
ให้คลิกทำการ Run ตัว Services
เมื่อกลับมาดูที่ Path ของโปรแกรม จะเห็นว่า Log.txt ถูกสร้าง
พร้อมกับมีการเขียน Text เป็นเวลาที่ถูก Start
ทดสอบ Stop ตัว Services
ก็จะเห็นว่ามีการเขียน Text เป็นเวลาที่ถูก Stop
การ Uninstall ตัว Service
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /u MyService.exe
แสดง Service ถูก Uninstall เรียบร้อย
เมื่อกลับไปดูที่ Services Control Manager ก็จะเห็นว่ารายการ Services ถุกลบออกไปแล้ว
Note! ในการใช้งานจริงควรจะกำหนดสถานะของการ Build เป็นแบบ Release
โดยเวลาเรียกก็ให้เรียกจาก Release แทน
C:\TestWinApp\MyService\MyService\bin\Release
Note!! ในกรณีที่ Service ไม่ Start เราสามารถดู Log ได้ที่ Event Viewer
กรณีทีมี Error จะแสดง Log ที่ Event Viewer