У меня есть приложение в С# (2.0, работающее на XP), которое связывается с "сторожевым псом", который реализован как служба Windows. Когда устройство загружается, эта служба обычно занимает некоторое время, чтобы начать работу. Я хочу проверить, из моего кода, если служба работает. Как я могу это сделать?
Как проверить, работает ли служба Windows
Ответ 1
Я думаю, что-то вроде этого будет работать:
Добавьте System.ServiceProcess в ваши ссылки на проект (это на вкладке .NET).
using System.ServiceProcess;
ServiceController sc = new ServiceController(SERVICENAME);
switch (sc.Status)
{
case ServiceControllerStatus.Running:
return "Running";
case ServiceControllerStatus.Stopped:
return "Stopped";
case ServiceControllerStatus.Paused:
return "Paused";
case ServiceControllerStatus.StopPending:
return "Stopping";
case ServiceControllerStatus.StartPending:
return "Starting";
default:
return "Status Changing";
}
Изменить: существует также метод sc.WaitforStatus()
, который принимает желаемый статус и тайм-аут, никогда не использовал его, но может удовлетворить ваши потребности.
Изменить: как только вы получите статус, чтобы получить статус снова, вам нужно сначала позвонить sc.Refresh()
.
Ссылка: ServiceController объект в .NET.
Ответ 2
Пожалуйста, посмотрите на ServiceController объект в .NET.
Ответ 3
Здесь вы получаете все доступные сервисы и их статус на своем локальном компьютере.
ServiceController[] services = ServiceController.GetServices();
foreach(ServiceController service in services)
{
Console.WriteLine(service.ServiceName+"=="+ service.Status);
}
Вы можете сравнить свою службу с свойством service.name внутри цикла и получить статус своей службы. Подробнее см. http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.aspx также http://msdn.microsoft.com/en-us/library/microsoft.windows.design.servicemanager(v=vs.90).aspx