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
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
рейтинг книги
Новик
2. Помещик
Фантастика:
альтернативная история
6.67
рейтинг книги
Инвестиго, из медика в маги. Том 6. Финал
6. Инвестиго
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Законы Рода. Том 11
11. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Леди Малиновой пустоши
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Аристократ из прошлого тысячелетия
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга IX
9. КО: Страж Кодекса
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Солнечный корт
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Охота на царя
2. Сыщик Его Величества
Детективы:
исторические детективы
8.68
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Страж Кодекса. Книга III
3. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга V
5. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 8
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Надуй щеки! Том 6
6. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00