2008-09-29 5 views
2

ИТАК часть два из I have no will power experiment является:способ остановить службу Windows, когда CanStop установлен в значение False (C#)

Резюме Вопрос - Есть ли способ, чтобы установить свойство CanStop на окна службы динамически?

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

Далеко, насколько я могу судить, ServiceController просто является декоратором (yah design patern guess), и поэтому у меня нет возможности получить фактическое обслуживание, которое он представляет. Первая попытка была Property Info, но я был слишком глуп, чтобы понять, что это будет бессмысленно. Вторая была полевой информацией, потому что я думал, что может быть частное поле, которое «представляет» службу. Как вы могли догадаться, оба потерпели неудачу.

Любые идеи?

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

новые (Failed) Попытки:

ManagementObject обслуживание; ManagementBaseObject stopService;

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

stopService = сервис .InvokeMethod ("StopService", null, null);

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

ответ

2

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

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

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

+0

Foiled процессом убить. Я даже этого не сделал. И да, я мог бы удалить игру, но это было скорее учебной вещью. – 2008-09-29 18:04:30

0

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