2011-08-16 42 views
3

我注意到,「sc刪除ServiceKeyName」將不起作用,如果services.mmc是打開的。它標誌着它的刪除(無論如何!這只是意味着它不會做我想要的,就我而言)。其實**刪除**服務,而services.msc是開放的

我的問題是:有沒有一種方法來刪除一個服務,無論services.mmc是否打開都可以工作?或者我應該確保在嘗試刪除之前關閉了services.mmc的任何實例?

我在找到使用DeleteService函數

http://msdn.microsoft.com/en-us/library/ms682562%28v=VS.85%29.aspx

http://msdn.microsoft.com/en-us/library/ms682571%28v=VS.85%29.aspx

但它也關閉手柄和類似的藉口,爲什麼它不能做什麼用戶已經要求立即進行會談。因此,如果DeleteService將要求services.mmc關閉,那麼我將堅持sc delete並殺死services.mmc上的進程,而不是實現DeleteService。我想要一個方法來做它做廣告的方法(沒有任何藉口 - 不要等待任何東西)。

+0

我們隨時拆卸服務(在我們的套件版本之間切換),並打開services.mmc。還沒有研究過DeleteService,但我認爲它確實只是一個首先停止服務的問題。 –

+0

嗨Marjan,哦,我們也停止了服務,但是您使用哪種方法來阻止它們(「sc stop」或ControlService(..,SERVICE_CONTROL_STOP,..),並且在卸載服務之後是否有延遲(例如睡眠(3000))或者你立即執行重新安裝? – Sam

+1

呃,我們通過services.mmc或者通過一個net stop命令來停止它們。我們使用新的exe文件重新安裝,它識別/ reinstall命令行參數(vs install或者卸載)。重新安裝會執行卸載/安裝順序,歸結爲OpenService/DeleteService,然後是CreateService,因此它非常直接:-)。 –

回答

3

爲了實現這一目標,您需要MMC MMC管理單元關閉並重新打開服務控制管理器的句柄。它不會這樣做,因此你必須接受這種行爲。

1

我遇到了同樣的事情。如果您在服務名稱後傳遞命令-remove,即使services.mmc打開,它也會將其刪除。在移除之前,先通過命令行net stop'servicename'停止服務。祝你好運。