Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

Мы реализуем метод

RefreshServiceList
, который вызывается в конструкторе класса
ServiceControlForm
. Этот метод заполняет окно списка внешними именами всех служб.
GetServices
является статическим методом класса
ServiceController
, и он возвращает массив
ServiceController
, представляющий все службы Windows. Класс
ServiceController
также имеет статический метод
GetDevice
, который возвращает массив
ServiceController
, представляющий все драйверы устройств.

Окно списка заполняется с помощью связывания данных:

private System.ServiceProcess.ServiceController[] services;

public ServiceControlForm {

 //

 //
Требуется для поддержки Windows Form Designer

 //

 InitializeComponent;

 RefreshServiceList;

}

protected void RefreshServiceList {

 services = ServiceController.GetServices;

 listBoxServices.DisplayMember = "DisplayName";

 listBoxServices.DataSource = services;

}

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

ServiceController
имеет следующие свойства для данных о службе:

Свойства
ServiceController
CanPauseAndContinue
Если службе можно послать запрос pause и continue, то возвращается
true
.
CanShutdown
true
, если служба имеет программу обработки для выключения системы.
CanStop
true
, если службу можно остановить.
DependentServices
Возвращает совокупность подчиненных служб. Если служба остановлена, то все подчиненные службы заранее останавливаются.
ServicesDependentOn
Возвращаем совокупность служб, которые зависят от этой службы.
DisplayName
Имя, которое должно выводиться для этой службы.
MachineName
Имя машины, на которой выполняется эта служба.
ServiceName
Имя службы.
ServiceType
Служба может выполняться внутри общего процесса, где более одной службы используют один и тот же процесс (
Win32ShareProcess
), или выполняться так, что существует только одна служба внутри процесса (
Win32OwnProcess
). Если служба может взаимодействовать с рабочим столом компьютера, то тип будет
InteractiveProcess
.
Status
Статус службы. Статус может быть running, stopped paused или в некотором промежуточном режиме, таком как start pending, stop pending и т.д.

В рассматриваемом приложении используются свойства

DisplayName
,
ServiceName
,
ServiceType
и
Status
для вывода данных о службе, а также
CanPauseAndContinue
и
CanStop
для включения и отключения кнопок
Pause
,
Continue
и
Stop
.

Метод

OnSelectedIndexChanged
является методом обработки для окна списка. Он вызывается, когда пользователь
выбирает
службу в окне списка. В методе
OnSelectedIndexChanged
внешнее имя и имя свойства задаются непосредственно с помощью свойств класса ServiceController. Статус и тип не могут просто задаваться, так как должна выводиться строка вместо числа, которое возвращает класс
ServiceController
. Метод
SetServiceStatus
является вспомогательной функцией, просматривающей перечисление свойств
Status
для выводa строки статуса, а также включает и отключает кнопки.
GetServiceTypeName
создает имя типа службы.
ServiceType
мы получаем из
ServiceController.ServiceType
представляет множество флажков, которые могут комбинироваться с помощью побитового оператора
ИЛИ
. Бит
InteractiveProcess
может задаваться вместе с
Win32OwnProcess
и
Win32ShareProcess
. Необходимо проверить, задан ли бит
InteractiveProcess
прежде чем переходить к проверке других значений:

protected string GetServiceTypeName(ServiceType type) {

 string serviceType = "";

 if ((type & ServiceType.InteractiveProcess) != 0) {

serviceType = "Interactive ";

type -= ServiceType.InteractiveProcess;

 }

 switch (type) {

 case ServiceType.Adapter:

serviceType -= "Adapter";

break;

 case ServiceType.FileSystemDriver:

 case ServiceType.KernelDriver:

 case ServiceType.RecognizerDriver:

ServiceType += "Driver";

break;

 case ServiceType.Win32OwnProcess:

ServiceType += "Win32 Service Process";

break;

 case ServiceType.Win32ShareProcess;

ServiceType += "Win32 Shared Process";

break;

 default:

ServiceType += "unknown type " + type.ToString;

break;

 }

 return ServiceType;

}

protected void SetServiceStatus(ServiceController controller) {

 buttonStart.Enabled = true;

 buttonStop.Enabled = true;

 buttonPause.Enabled = true;

 buttonContinue.Enabled = true;

 if (!controller.CanPauseAndContinue) {

buttonPause.Enabled = false;

buttonContinue.Enabled = false;

 }

 if (!controller.CanStop) {

buttonStop.Enabled = false;

 }

 ServiceControllerStatus status = controller.Status;

 switch (status) {

 case ServiceControllerStatus.ContinuePending:

textBoxServiceStatus.Text = "Continue Pending";

buttonContinue.Enabled = false;

break;

 case ServiceControllerStatus.Paused;

textBoxServiceStatus.Text = "Paused";

buttonPause.Enabled = false;

buttonStart.Enabled = false;

break;

 case ServiceControllerStatus.PausePending:

textBoxServiceStatus.Text = "Pause Pending";

buttonPause.Enabled = false;

buttonStart.Enabled = false;

break;

 case ServiceControllerStatus.StartPending:

textBoxServiceStatus.Text = "Start Pending";

buttonStart.Enabled = false;

break;

 case ServiceControllerStatus.Running:

textBoxServiceStatus.Text = "Running";

buttonStart.Enabled = false;

buttonContinue.Enabled = false;

break;

 case ServiceControllerStatus.Stopped:

Поделиться:
Популярные книги

Убивать чтобы жить 4

Бор Жорж
4. УЧЖ
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 4

Новик

Ланцов Михаил Алексеевич
2. Помещик
Фантастика:
альтернативная история
6.67
рейтинг книги
Новик

Инвестиго, из медика в маги. Том 6. Финал

Рэд Илья
6. Инвестиго
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Инвестиго, из медика в маги. Том 6. Финал

Законы Рода. Том 11

Flow Ascold
11. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 11

Леди Малиновой пустоши

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Леди Малиновой пустоши

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аристократ из прошлого тысячелетия

Страж Кодекса. Книга IX

Романов Илья Николаевич
9. КО: Страж Кодекса
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Страж Кодекса. Книга IX

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

Охота на царя

Свечин Николай
2. Сыщик Его Величества
Детективы:
исторические детективы
8.68
рейтинг книги
Охота на царя

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Страж Кодекса. Книга III

Романов Илья Николаевич
3. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Страж Кодекса. Книга III

Неудержимый. Книга V

Боярский Андрей
5. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга V

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

Надуй щеки! Том 6

Вишневский Сергей Викторович
6. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки! Том 6