Способ остановки службы 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 только сообщает диспетчеру управления службами, что не следует отправлять в службу команды "Стоп".
Если вы хотите разрешить что-то проходить, используйте глобальное событие для включения / выключения проверки, выполняемой службой, или просто удалите игры с ПК!:-)
Вместо того, чтобы пытаться получить прямой доступ к Службе и управлять ею, вы можете установить где-нибудь флаг (например, реестр или файл), который затем проверяется вашей службой перед выполнением события, которым вы пытаетесь управлять.