Dot-Net
計劃的控制台應用程序與 Windows 服務?什麼時候適合使用每個
我剛剛讀到:將應用程序開發為 Windows 服務有什麼好處?但我仍然不確定何時使用 Windows 服務。
我有幾個任務需要每隔一段時間(即每 5 分鐘)執行一次。我應該使用哪種項目類型?是否有任何應該是 Windows 服務的應用程序類型的範例?
對於任何計劃任務,我通常會推荐一個 Windows 服務,原因如下:
- 即使使用者未登錄 PC,Windows 服務也會執行(即使伺服器處於登錄提示符下也會執行)(***注意 - 這可能取決於您執行的 Windows 版本)。
- 服務可以作為網路服務或本地系統或使用者等高權限帳戶執行 - 它們在這方面具有更多可配置性
- 服務還內置了用於在執行時啟動、停止、重新啟動和暫停的選項(有時)
- 您還可以為服務設置故障條件,例如如果它失敗了讓它自動重啟
至於可以是 Windows 服務的應用程序的其他範例,很多時候它們對遠端處理等應用程序很有用 - 您可以讓服務執行客戶端連接到的遠端處理伺服器。顯然,對於您希望在後台執行的數據處理任務,或者您希望在某些條件下發送電子郵件的過程等非常有用。
一般來說,我總是發現計劃任務更加脆弱和不可靠。除非你讓它們正確記錄,否則通常更難調試。
關於 Timer 的錯誤 - 如果您閱讀 MS 網站上的錯誤報告,您可以看到它是在 Timer_Elapsed 事件中呼叫“Stop”時引起的。答案很簡單——不要叫停。相反,將整個事情包裝在“IsRunning”布爾值的檢查中,並且僅在 IsRunning 為假時執行。即使計時器沒有問題,您仍然需要這樣做,因為如果您的執行時間長於計時器間隔,計時器可能會在您執行期間重新觸發。
無論如何,我仍然認為使用計劃任務是一個薄弱的解決方案,讓我回想起 Windows 95。