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

StackOverflow https://stackoverflow.com/questions/149632

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Есть какие-нибудь идеи?

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

Новый (Не Выполнено) Попытки:

Служба объектов управления;Управление базовым объектом stopService;

service = новый ManagementObject("Win32_Service.Name ='StopProgram'");

stopService = служба .invokeMethod("stopService", null, null);

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top