Если у вас нет конкретной c причины для использования DllImport, я бы предложил использовать уже доступную оболочку ServiceController , найденную в System.ServiceProcess сборка .
Затем, чтобы установить статус службы, просто введите имя службы следующим образом:
ServiceController serviceController = new ServiceController("MyServiceName");
serviceController.Start();
serviceController.Stop();
В идеале, перед запуском или остановкой службы необходимо предварительно проверить состояние. Для этого вы можете использовать следующий метод:
public ServiceControllerStatus GetServiceStatus(string serviceName)
{
ServiceController[] services = ServiceController.GetServices();
using (ServiceController service = services.FirstOrDefault(s => s.ServiceName == serviceName))
{
if (service != null)
{
using (ServiceController sc = new ServiceController(service.ServiceName))
{
return sc.Status;
}
}
else
{
//Here you can either throw an exception or return default(ServiceControllerStatus).
}
}
}