Способ остановить службу Windows, когда CanStop установлен на False (C #) - PullRequest
2 голосов
/ 29 сентября 2008

Хорошо, так что вторая часть из У меня нет эксперимента с силой воли :

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

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

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

Есть идеи?

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

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

ManagementObject service; ManagementBaseObject stopService;

сервис = новый ManagementObject ( "Win32_Service.Name = 'StopProgram'");

stopService = service .InvokeMethod ("StopService", ноль, нуль);

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

Ответы [ 2 ]

2 голосов
/ 29 сентября 2008

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

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

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

0 голосов
/ 29 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...