การ 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