2015-08-07 12 views
3

У меня есть следующие методы для запуска и остановки службы. Я вызываю этот метод из другого приложения консоли для отладки, поскольку я использовал методы в библиотеке классов (DLL).Не удалось запустить и остановить службу с помощью ServiceController

Приложение начато с административных прав.

public void ServiceStart() 
{ 
    ServiceController service = new ServiceController(); 
    service.ServiceName = "ASP.NET State Service"; 
    service.Start(); 
} 

public void ServiceStop() 
{ 
    ServiceController service = new ServiceController(); 
    service.ServiceName = "ASP.NET State Service"; 
    service.Stop(); 
} 

Но когда я называю Start() или Stop() исключение со следующим сообщением брошено: «»

Не удается открыть службу ASP.NET Государственная служба на компьютере

Может кто-нибудь помочь мне?

+4

Вы управляете программой с правами администратора? –

+0

Возможный дубликат [Как я могу перезапустить службу Windows программно в .NET] (http://stackoverflow.com/questions/1454502/how-can-i-restart-a-windows-service-programatically-in-net) – BugFinder

+0

Проверьте Windows EventLog – Ofiris

ответ

8

Вы должны передать Service name, а не Отображаемое имя. Всегда проверяйте свойства сервиса в приложении «Услуги».

Попробуйте снова с

service.ServiceName = "aspnet_state"; 

В качестве альтернативы, вы можете создать экземпляр ServiceController, используя имя дисплея:

ServiceController service = new ServiceController("ASP.NET State Service"); 

с documentation для аргумента конструктора говорит:

имя, которое идентифицирует сервис для системы. Это также может быть отображаемое имя для этой услуги.

также отметить, что вызов

service.Start(); 

возвращается немедленно, не дожидаясь службы, чтобы начать. Вы должны позвонить

service.WaitForStatus(ServiceControllerStatus.Running); 

, если вы хотите, чтобы убедиться, что служба запущена, прежде чем приложение продолжается.

+0

Я использовал 'ServiceController x = новый ServiceController (« State State Service ASP.NET »); отлично на моем ПК - поэтому он не предполагает, что это – BugFinder

+0

@BugFinder Да, поскольку документация * для конструктора * говорит, что «это также может быть отображаемое имя для службы». Тем не менее, для свойства ServiceName, которое не является ** не случаем. – helb

+0

А, я пропустил это. Но стоит отметить, что у ОП есть выбор. – BugFinder