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

ЖАНРЫ

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

Ватсон Карли

Шрифт:

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:

textBoxServiceStatus.Text = "Stopped";

buttonStop.Enabled = false;

break;

 case ServiceControllerStatus.StopPending:

textBoxServiceStatus.Text = "StopPending";

buttonStop.Enabled = false;

break;

 default:

textBoxServiceStatus.Text = "Unknown status";

break;

 }

}

protected void OnSelectedIndexChanged(object sender, System.EventArgs e) {

 ServiceController controller =

(ServiceController)listBoxServices.SelectedItem;

 textBoxDisplayName.Text = controllerDisplayName;

 textBoxServiceType.Text =

GetServiceTypeName(controller.ServiceType);

 textBoxServiceName.Text = controller.ServiceName;

 SetServiceStatus(controller);

}

Управление

службой

С помощью класса

ServiceController
можно также посылать службе управляющие запросы.

Методы
ServiceController
Start
Start
сообщает SCM, что служба должна быть запущена. В нашей служебной программе вызывается
OnStart
.
Stop
Stop
вызывает
OnStop
в нашей служебной программе с помощью SCM, если свойство
CanStop
задано как true в классе службы
Pause
Pause
вызывает
OnPause
, если свойство
CanPauseAndContinue
задано как true.
Continue
Continue
вызывает
OnContinue
, если свойство
CanPauseAndContinue
задано как true.
ExecuteCommand
С помощью
ExecuteCommand
можно послать службе специальную команду.

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

protected void buttonCommand_Click(object sender, System.EventArgs e) {

 Cursor Current = Cursors.WaitCursor;

 ServiceController controller =

 (ServiceController)listBoxServices.SelectedItem;

 if (sender == this.buttonStart) {

controller.Start;

controller.WaitForStatus(ServiceControllerStatus.Running);

 } else if (sender == this.buttonStop) {

controller.Stop;

controller.WaitForStatus(ServiceControllerStatus.Stopped);

 } else if (sender == this.buttonPause) {

controller.Pause;

controller.WaitForStatus(ServiceControllerStatus.Paused);

 } else if (sender == this.buttonContinue) {

Поделиться с друзьями: