Windows XP 開機需啟動 80 多項服務,多數使用者不知其詳,盲目停用導致功能異常,全開又浪費資源。本文帶你「第一次親密接觸」Windows 服務:認識服務本質、分辨必開/可關、實作 VS.NET 建立自訂 Windows Service 實現定時資料庫備份與 .NET Remoting 宿主,從使用者進階為開發者。
什麼是 Windows 服務?
服務 是在背景執行、無使用者介面、支援開機自動啟動、可暫停/繼續/停止、具備安全性內容 的長期運行程式。不同於一般應用程式:
• 無視窗、不佔用工作列。
• 在「服務控制管理器」(SCM) 管控下啟動/停止。
• 可在使用者登入前即運行 (系統帳戶/服務帳戶)。
• 典型用途:事件記錄、列印佇列、Windows Update、資料庫引擎、備份代理、遠端存取…
核心服務:必開 vs 可關參考 (XP/2003 基準,Win7/10/11 服務名稱類似)
| 服務名稱 | 顯示名稱 | 建議 | 說明 |
| EventLog | 事件記錄 | 必開 | 系統/應用/安全日誌核心 |
| PlugPlay | 即插即用管理 | 必開 | 硬體偵測與驅動載入 |
| RpcSs | 遠端程序呼叫 (RPC) | 必開 | COM/DCOM/系統核心通訊基礎 |
| LanmanWorkstation | 工作站 | 必開 | 網路連線、檔案共享用戶端 |
| LanmanServer | 伺服器 | 視需求 | 提供檔案/列印共享 (不共享可關) |
| Themes | 主題 | 視需求 | 視覺樣式 (關閉省資源、經典外觀) |
| AudioSrv | Windows Audio | 視需求 | 聲音 (無聲音需求可關) |
| WZCSVC | 無線網路設定 | 視需求 | 無線網卡管理 (桌機可關) |
| wuauserv | 自動更新 | 建議開 | 安全性修補關鍵 |
| ERSvc | 錯誤報告服務 | 可關 | 傳送錯誤報告給微軟 |
| ImapiService | CD 燒錄 COM 服務 | 可關 | 不燒錄可關 |
| RemoteRegistry | 遠端登錄檔 | 建議關 | 允許遠端修改登錄檔,高風險 |
| SSDPSRV | SSDP 發現服務 | 可關 | UPnP 裝置發現 |
| Messenger | Messenger | 建議關 | 接收網路彈窗垃圾 (XP/2003) |
原則: 不確定的服務保持「手動」,觀察一段時間無異常再改「停用」。修改前建立系統還原點。
實作:用 Visual Studio .NET 建立 Windows Service (C# 範例)
專案建立步驟
- VS.NET →「新增專案」→「Windows Service」範本 → 命名
MyDbBackupService。
- 設計檢視 → 從「工具箱」→「元件」拖曳 Timer 到設計面 (非 Windows Forms Timer)。
- Timer 屬性:
Interval = 200 (毫秒,每秒 5 次觸發,實務建議設 3600000 = 1 小時)。
- 雙擊 Timer → 撰寫
Timer_Elapsed 事件處理邏輯:
private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
using (SqlConnection conn = new SqlConnection("server=127.0.0.1;database=test;uid=sa;pwd=275280"))
{
string sql = "INSERT INTO tb1 (col1, col2) VALUES ('111', 11)"; // 實際換成備份/維護邏輯
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
- 設計檢視右鍵 →「加入安裝程式」→ 產生
ProjectInstaller。
- ProjectInstaller 設計檢視 → 設定:
serviceInstaller1.ServiceName = "MySampleService"
serviceInstaller1.StartType = ServiceStartMode.Automatic (開機自動啟動)
serviceProcessInstaller1.Account = ServiceAccount.LocalSystem (最高權限,或 User/NetworkService)
- 建置專案 → 輸出
MyDbBackupService.exe 至 bin\Debug\ 或 bin\Release\。
- 以系統管理員開啟命令提示字元 → 切換至輸出目錄 → 執行:
InstallUtil MyDbBackupService.exe (註冊服務)。
InstallUtil /u MyDbBackupService.exe (移除服務)。
- 右鍵「我的電腦」→「管理」→「服務與應用程式」→「服務」→ 找 MySampleService → 右鍵「啟動」。
進階應用:.NET Remoting 宿主於 Windows Service
將 Remoting 伺服器物件 (WellKnown/Client-Activated) 寄宿於 Windows Service,服務啟動時註冊通道 (TcpChannel/HttpChannel) 與物件,客戶端即可透過 Activator.GetObject 遠端呼叫,無需 IIS/ASP.NET,輕量級分散式架構雛形。
服務管理實用工具
services.msc:圖形介面管理。
sc query / sc start / sc stop / sc config:命令列管理,適合腳本自動化。
tasklist /svc (XP/2003) / tasklist /svc /fi "imagename eq svchost.exe":查看 svchost.exe 承載哪些服務。
- Sysinternals Autoruns / Process Explorer:深度分析啟動項、服務、DLL 載入。
Windows 服務是系統骨幹,亦是開發者利器。認清哪些必開、哪些可關,善用 VS.NET 建立自訂服務,讓定時備份、Remoting 宿主、長期監控等任務在背景穩定運行,不再佔用桌面、不怕使用者誤關,真正實現「設定好就忘記它」的自動化境界!