2011-01-27 3 views
0

У меня есть служба Windows, которую я пытаюсь остановить progrmatically с помощью ServiceController.Stop():ServiceController.Stop() не остановить работу

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

Однако, когда я вижу эту услугу в списке услуг, его статус до сих пор остается «начатым». Если я вызову метод sc.WaitForStatus(), чтобы подождать, пока статус не будет изменен на «Остановлен», этот статус никогда не будет достигнут.

Что случилось?

+0

Если вы попытаетесь остановить его из списка сервисов, это работает? –

+0

@Jon: Да, он останавливается из списка услуг, если я делаю это вручную. – Learner

+0

Любые исключения? Возможно, проблема разрешения? – leppie

ответ

1

Я думаю, проблема была связана с устаревшим кодом.

Нам нужна некоторая конфигурация, и требование заключается в отсутствии конфигурации в файле конфигурации, обслуживание не должно запускаться. Эта проверка была сделана в OnStart(). ServiceController.Stop() вызывался из самого метода OnStart() всякий раз, когда валидация терпит неудачу! Я думаю, поэтому ServiceController.Stop() не смог остановить службу, и я так и не получил статус «Остановлен» в вызове метода WaitForStatus().

Я изменил логику, и теперь я не звоню ServiceBase.Run() метод (который дает вызов OnStart()) при необходимости конфигурации отсутствует.

Унаследованный код пытался остановить службу с помощью метода Start!

Смежные вопросы