Способ остановки службы Windows, когда CanStop установлен на False (C#)

Итак, вторая часть эксперимента "У меня нет силы воли":

Итоговый вопрос -есть ли способ динамически установить свойство CanStop для службы Windows?

Whole Spiel - у меня есть сервис, который в настоящее время проверяет и убивает процессы (IE Games), я сказал ему, если это будет день, когда меня не пускают. Отлично. Я установил для CanStop значение false, чтобы я не мог просто убить службу, если поддался зависимости. У меня есть программа, которая будет проверять пароль (кто-то еще вводит пароль), который остановит службу, если пароль правильный. (Если у меня серьезные изъятия) Проблема в использовании класса ServiceController.

Насколько я могу судить, ServiceController - это просто декоратор (да, думаю, дизайнер паттерн), и поэтому у меня нет никакого способа получить тот сервис, который он представляет. Первой попыткой была информация о недвижимости, но я был слишком туп, чтобы понять, что это будет бессмысленно. Во-вторых, информация о поле, потому что я думал, что может быть личное поле, которое "представляет" службу. Как вы можете догадаться, оба провалились.

Есть идеи?

РЕДАКТИРОВАТЬ 1 Я хотел бы избежать значения CanStop где-нибудь, я могу легко получить его, как файл конфигурации или реестр. Поэтому я пытаюсь, хотя и не успешно, сделать это полностью обработанным в программе.

Новые (неудачные) попытки:

Сервис ManagementObject; ManagementBaseObject stopService;

service = new ManagementObject ("Win32_Service.Name = 'StopProgram'");

stopService = service.InvokeMethod ("StopService", null, null);

Не уверен, что это что-то сделал. Я предполагаю, что это не могло остановиться из-за ситуации CanStop.

2 ответа

Решение

"CanStop" является атрибутом регистрации услуг в диспетчере управления службами Windows. Вы не можете изменить это в середине шага.

И, конечно, если вы достаточно умны, чтобы написать свой собственный сервис, значит, вы достаточно умен, чтобы вызвать задачу и просто убить процесс обслуживания. CanStop не помешает вам вытащить коврик из-под сервиса. CanStop только сообщает диспетчеру управления службами, что не следует отправлять в службу команды "Стоп".

Если вы хотите разрешить что-то проходить, используйте глобальное событие для включения / выключения проверки, выполняемой службой, или просто удалите игры с ПК!:-)

Вместо того, чтобы пытаться получить прямой доступ к Службе и управлять ею, вы можете установить где-нибудь флаг (например, реестр или файл), который затем проверяется вашей службой перед выполнением события, которым вы пытаетесь управлять.

Другие вопросы по тегам