ServiceController.Stop (), похоже, ничего не останавливает - PullRequest
0 голосов
/ 12 мая 2010

My devbox - это компьютер под управлением Windows 7 (x64). У меня есть некоторый код (C #, .net 2.0), который при определенных обстоятельствах проверяет, работает ли служба, а затем останавливает ее.

ServiceController matchedService = //My Service!

//If statements and such

matchedService.Stop();
matchedService.WaitForStatus(ServiceControllerStatus.Stopped);

Теперь я могу убедиться, что MyService действительно установлен и работает. Я могу сказать вам, что я выполняю Visual Studio 2008 как администратор во время отладки. Я также могу убедиться, что после пары If операторов я попаду в части программирования .Stop () и .WaitForStatus (). Я действительно знаю, что если перешагнуть вызов .Stop (), сама служба просто продолжит работу (глядя на нее в Services , хотя мне кажется, что мне следует воспользоваться более подходящим инструментом для этого. я уверен, что есть какой-то инструмент sysinternals, который может дать мне больше информации). Когда я перехожу вызов .WaitForStatus (), я в основном ожидаю остановленного состояния. , , навсегда. Хорошо, я оставил это там более 15 минут вчера (дважды), и ничего не происходит. Мы никогда не доберемся до следующей строки кода. Это похоже на странную странность Боуи (вы знаете ту часть, о которой я говорю).

В MyService есть много вещей, о которых вы ничего не знаете. Вещи, которые вы не поймете. Вещи, которые вы не могли. , , позвольте мне прямо заявить об этом. Ни один сервис не зависит от MyService, а MyService не зависит от других сервисов. Addendum MyOtherService и SonOfMyService, похоже, работают правильно в этой точке кода. Все эти сервисы имеют одинаковые характеристики (это наши собственные сервисы, которые мы создали в секретной лаборатории и не имеют никаких зависимостей). Возможно, что-то не так с установкой MyService или что-то в этом роде?

Я знаю, что если я прекратить отладку на этом этапе, MyService по-прежнему будет отображаться как работающий в Службах (даже после нажатия кнопки «Обновить»). Если я попытаюсь перезапустить его (или снова запустить мое приложение и добраться до этой точки), я получаю сообщение о том, что оно не может принимать управляющие сообщения. После этого служба отображается как остановленная, и я могу запустить ее как обычно.

Почему служба не останавливается? Это причуда победы 7? С моей стороны невозможно понять ServiceController или Win Services в целом?

1 Ответ

0 голосов
/ 13 мая 2010

После дальнейшего расследования я считаю, что это проблема самой службы.

...