2012-05-07 3 views
1

Я пытаюсь остановить запущенную службу с помощью консольной программы, которую я создал. Это не мой код:Остановка службы

ServiceController sc = new ServiceController(ServiceName, "."); 
sc.Stop(); 

Я тогда ждать статуса службы, чтобы включить в Остановился, но это не происходит. Кажется, что StopPending и никогда не остановились. Когда я проверяю Services.msc, он указан как остановленный, а в диспетчере задач процесс исчез.

Будет ли он оставаться в ожидании навсегда? Я делаю что-то неправильно? У меня есть код для службы, если мне нужно что-то изменить.

ответ

5

Я делаю что-то неправильно?

Вы можете попробовать waiting после остановки службы:

sc.Stop(); 
sc.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(25)); 

Метод WaitForStatus будет ждать службы, чтобы достичь заданного состояния или для заданного тайм-аута истекает до возвращения.

+0

Я уже жду. Кажется, он не изменился с Pending. – Nicolai

+0

На самом деле это работало. Я проверял себя, с петлей while, спрашивая sc.status. Я не знаю, почему это не изменилось с Pending. Переход на WaitForStatus зафиксировал его. – Nicolai

+0

@Nicolay, возможно, статус был кеширован. Существует метод 'sc.Refresh()' для обновления статуса. Но WaitForStatus - лучшее решение – HugoRune

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