2012-06-20 254 views
5

我有我自己的註冊處理程序的自定義Windows服務,如何防止從服務管理器收到停止命令時停止它?我在服務和GUI之間建立了一個管道通信,並且我只想從GUI停止它,當我嘗試從Windows服務管理器中停止它時,向Windows服務發送「停止」消息。我在C#工作#阻止Windows服務管理器停止服務c#

+2

機器什麼時候關機?停止服務的命令是否不是來自服務管理器? – Paparazzi

+1

這樣做是否會挫敗使用Windows Service的目的? –

+3

那麼我不在乎目的,我只是想做。 – AlexandruC

回答

11

這是回答您的問題嗎?

http://bytes.com/topic/c-sharp/answers/444965-prevent-service-stopping

設置CanStop屬性設置爲false。然後你需要一個用戶可以用來請求停止的應用程序。這個應用程序然後會與您的服務進行通信(可能通過遠程處理),如果條件允許,則停止其自身。您應該可以通過動態設置'CanStop'爲true來完成此操作,然後使用ServiceController類連接到自己併發出'Stop'命令。

+0

同意你的評論無法阻止OnStop中的停止命令。我刪除了我的答案。 – Paparazzi

+0

完美。就是我一直在尋找的東西。 – AlexandruC

0

作爲一種替代方案,您可以簡單地保護服務設置(修改服務DACL),使得只有特殊用戶帳戶(也可能是SYSTEM)纔有權停止服務並在安裝期間安裝此特殊本地用戶帳戶。

然後,您的控制應用程序可以使用標準服務控制管理器功能以及該特殊用戶的安全令牌,並且一切都按預期工作,無需執行任何異常操作。