Как я могу проверить, работает ли служба Windows - PullRequest
163 голосов
/ 07 октября 2008

У меня есть приложение на C # (2.0, работающее на XP встроенной), которое взаимодействует с «сторожевым таймером», реализованным как служба Windows. Когда устройство загружается, запуск этой службы обычно занимает некоторое время. Я хотел бы проверить из своего кода, работает ли служба. Как мне это сделать?

Ответы [ 3 ]

328 голосов
/ 07 октября 2008

Я думаю, что-то вроде этого будет работать:

Добавьте 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.

20 голосов
/ 07 октября 2008

Пожалуйста, посмотрите на ServiceController объект в .NET.

12 голосов
/ 24 июня 2014

Здесь вы получаете все доступные сервисы и их статус на вашем локальном компьютере.

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

...