2011-01-27 128 views
0

我有我想要停止使用progrmatically一個ServiceController.Stop()窗口服務:ServiceController.Stop()無法停止服務

ServiceController sc = new ServiceController(<ServiceName>);      
sc.Stop(); 
sc.Refresh(); 

然而,當我看到在服務列表中該服務,其狀態仍仍然是「開始」。如果我將方法sc.WaitForStatus()等待狀態更改爲「已停止」,則永遠不會達到此狀態。

怎麼回事?

+0

如果您嘗試從服務列表中停止它,這是否工作? – 2011-01-27 08:01:34

回答

1

我覺得問題是遺留代碼。

我們需要一些配置,要求是配置文件中缺少配置,服務不應該啓動。該驗證在OnStart()中完成。每當驗證失敗時,OnStart()方法本身就調用ServiceController.Stop()!我認爲這就是爲什麼ServiceController.Stop()無法停止服務,我從來沒有在WaitForStatus()方法調用中獲得狀態「停止」。

我改變了邏輯,現在我不打電話給ServiceBase.Run()方法(這給OnStart()打電話),如果必要的配置丟失。

傳統代碼試圖從其Start方法停止服務!