Хорошо, так что вторая часть из У меня нет эксперимента с силой воли :
Краткий вопрос -
Есть ли способ динамически установить свойство CanStop для службы Windows?
весь шпиль -
У меня есть служба, которая в настоящее время проверяет и убивает процессы (IE Games). Я сказал ей, если это будет день, когда мне не разрешено. Отлично. Я установил для CanStop значение false, чтобы я не мог просто убить службу, если поддался зависимости. У меня есть программа, которая будет проверять пароль (кто-то еще вводит пароль), который остановит службу, если пароль правильный. (Если у меня серьезные изъятия) Проблема в использовании класса ServiceController.
Насколько я могу судить, ServiceController - это просто декоратор (да, думаю, дизайнер паттерн), и поэтому у меня нет никакого способа добраться до реального сервиса, который он представляет. Первой попыткой была информация о недвижимости, но я был слишком глуп, чтобы понять, что это будет бессмысленно. Во-вторых, информация о поле, потому что я думал, что может быть личное поле, которое «представляет» службу. Как вы можете догадаться, оба провалились.
Есть идеи?
РЕДАКТИРОВАТЬ 1
Я хотел бы избежать наличия значения CanStop где-нибудь, к которому я могу легко добраться как файл конфигурации или реестр. Поэтому я пытаюсь, хотя и не успешно, сделать это полностью обработанным в программе.
Новые (неудачные) попытки:
ManagementObject service;
ManagementBaseObject stopService;
сервис = новый
ManagementObject ( "Win32_Service.Name = 'StopProgram'");
stopService = service
.InvokeMethod ("StopService", ноль,
нуль);
Не уверен, что это что-то сделал. Я предполагаю, что это не могло остановиться из-за ситуации CanStop.