Как я могу проверить, работает ли служба Windows


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

3 156

3 ответа:

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

добавить 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";
}

Edit: существует также метод sc.WaitforStatus() который принимает желаемый статус и тайм-аут, никогда не использовал его, но он может удовлетворить ваши потребности.

Edit: как только вы получите статус, чтобы получить статус снова вам нужно будет позвонить sc.Refresh() первый.

ссылки: ServiceController объект в. NET.

пожалуйста, взгляните на ServiceController объект в. NET.

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

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