C#中的Windows服務入門
Windows服務是.NET生態系統中強大的工具,能夠在不需要使用者介入的情況下執行背景任務。 在C#中創建Windows服務可能聽起來很複雜,但在他的影片"Intro to Windows Services in C# - How to create, install, and use a service using Topshelf"中,Tim Corey逐步拆解了這個過程。
在這篇文章中,我們將一步步探索該影片,涵蓋每個主題以提供清晰與連貫的理解。
Windows服務簡介
Tim介紹了Windows服務作為一種強大且經常被忽視的自動化工具。 這些應用程式被設計為在背景中運行,處理任務而不需要使用者介面。 常見的例子包括SQL Server Agent或Hyper-V服務。
Tim強調了練習對於掌握C#的重要性。 他建議下載影片描述中鏈接的源代碼以進行實踐學習。
創建控制台演示應用程式
使用Visual Studio,Tim創建了一個新的控制台應用程式專案,名為SimpleHeartbeatService。儘管您可以使用Windows Service專案模板,但Tim更喜歡控制台方法以簡化偵錯。
"這裡的重點不是我放入什麼代碼,而是如何創建服務本身," Tim說。
什麼是Windows服務?
Tim使用開始選單搜尋功能打開Windows中的服務選項卡(只需輸入 "services" 並按Enter)。 他解釋說,在背景中運行的服務執行了許多重要的操作系統功能,如遠端桌面或MySQL伺服器。
目標是使用自定義代碼在此列表中創建新的條目。
Visual Studio專案類型:控制台應用程式與Windows服務
您可能會想選擇Visual Studio中的Windows Service專案,但Tim解釋說這更難以偵錯。 相反,控制台應用程式允許您在本地運行和測試,減少了必須附加偵錯器到正在運行的服務的需要。
">> "內建的服務類型專案使偵錯更困難,因為您必須先安裝它,然後才能附加偵錯器。"
通過NuGet添加Topshelf
為簡化服務執行,Tim通過NuGet添加了Topshelf,一個開源框架。 這個受歡迎的程式庫(擁有數百萬次下載量)有助於創建Windows服務而不需樣板代碼。
步驟:
-
右鍵點擊References
-
選擇Manage NuGet Packages
- 搜尋並安裝Topshelf
撰寫服務邏輯
Tim創建了一個Heartbeat類,包含兩個公開方法:Start() 和 Stop()。 在構造函數中,他設置了一個System.Timers.Timer,每秒執行一次。
這個定時器的Elapsed事件將當前時間附加到C:\temp\demos\文件夾中的.txt檔案。 這模擬了一個持續運行的背景任務。
">> "這個定時器將每秒寫入一個文本檔案,顯示服務正在運行。"
這演示了長時間運行的程式在現實服務中的工作,例如文件夾掃描或文件打印。
使用Topshelf連接服務
使用HostFactory.Run,Tim將Topshelf整合到應用程式中:
-
定義Heartbeat類
-
映射Start()和Stop()方法
- 配置服務以LocalSystem身份運行,授予必要的權限
他還為服務設置了元數據:
-
服務名稱:HeartbeatService
-
顯示名稱:Heartbeat Service
- 描述:用於YouTube影片中的演示目的
以控制台應用程式運行服務
在安裝前,Tim運行應用程式以進行測試。 定時器正確地將時間戳附加到heartbeat.txt。 使用Notepad++的監控功能,他展示了實時更新。
安裝和驗證服務
Tim將.exe和相關文件從bin\Debug文件夾複製到永久位置(如C:\demos\HeartbeatService)。 使用管理員命令提示字元,他運行以下命令:
SimpleHeartbeatService.exe install
SimpleHeartbeatService.exe start
SimpleHeartbeatService.exe install
SimpleHeartbeatService.exe start
這將服務添加到服務控制管理器。 再次打開服務選項卡並單擊刷新,服務現在可見並正在運行。
">> "安裝服務真的很容易,並且可以輕鬆地使用服務做很多事情。"
要卸載:
SimpleHeartbeatService.exe uninstall
SimpleHeartbeatService.exe uninstall
回顧:優點與考量
Tim再次總結說使用Topshelf創建和安裝服務是簡單直接的。 然而,他警告說無限的文件寫入可能導致存儲問題,這是一個對於正確日誌管理的良好提醒。
現實世界的服務創意
Tim分享了Windows服務的實際創意:
-
文件夾清理:從下載中刪除舊文件
-
圖片整理:按日期將照片分入文件夾
-
CSV處理:監視文件夾並自動將CSV導入資料庫
- 電子郵件自動化:監控客服表並發送通知
這些例子展示了如何使用服務自動化背景任務並與SQL Server、OneDrive及任務排程器等工具整合。
結束語
Tim以鼓勵開發者進行實驗做結尾。 僅需注意記憶體、存儲和事件記錄。 如果您需要自動更新,安全設置或更穩健的部署,則需要進一步的配置。
">> "這裡有很多強大的功能和可以做的事情。"
結論
使用Tim Corey的逐步示範影片,在C#中創建一個Windows服務變得方便且實用。 透過利用Topshelf,可以將控制台應用程式轉換為一個完全運作的Windows服務,只需最少的設定。無論您是在管理日誌文件、處理資料庫事件或執行自動化,服務提供了一種建構即時背景.NET Framework或.NET Core應用程式的強大且可擴展的方式。
將本教程作為您全面理解、創建和安裝服務的完整路徑。 別忘了要徹底測試,並且始終以管理員身分運行安裝程式或命令提示字元。


