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