2013-03-03 3 views
2

Я хочу перезапустить службу окон с именем «Буфер», я сделал следующий код, но не повезло, у любого тела есть представление о том, что происходит неправильно? кодКак перезапустить службу окна

using System.ServiceProcess; 

ServiceController service = new ServiceController("Spooler"); 

if ((service.Status.Equals(ServiceControllerStatus.Stopped)) || 
    (service.Status.Equals(ServiceControllerStatus.StopPending))) 
{ 
    service.Start(); 
} 
else 
{ 
    service.Stop(); 
    service.Start(); 
} 

Исключение составляет

«System.InvalidOperationException: ''. Не удается запустить службу диспетчера очереди печати на компьютере ---> System.ComponentModel.Win32Exception: экземпляр службы уже работает

--- Конец внутренней трассировки стека исключений ---

в System.ServiceProcess.Ser viceController.Start (String [] арг)

на System.ServiceProcess.ServiceController.Start()

на servicerestart.Form1.button1_Click (Object отправителя, EventArgs е) в D: \ samplecodes \ servicerestart \ servicerestart \ Form1.cs: строка 33"

+2

'but not luck' - не очень точное описание проблемы. Не могли бы вы выполнить более конкретное описание проблемы, не связанной с удачей или Богом, но с конкретными сообщениями об ошибках или нежелательным поведением. –

+1

@ Darin Dimitrov Я обновил свой вопрос – vettori

ответ

9

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

else 
{ 
    service.Stop(); 
    service.WaitForStatus(ServiceControllerStatus.Stopped); 
    service.Start(); 
    service.WaitForStatus(ServiceControllerStatus.Running); 
} 
+1

похоже, что он будет работать, но я не вижу, что сервис останавливается и запускается в апплете (SCM). Есть ли у нас механизм быстрого прекращения и немедленного начала? – vettori

+0

Нет, это правильный способ запускать и останавливать службу в .NET. Вы также можете подождать после запуска службы. –

+0

Я не думаю после .Start(); метод, будет использоваться метод ServiceControllerStatus.Started. Ошибка компиляции – vettori

0

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

Для этого необходимо изменить идентификатор приложения в ISS для LocalSystem.

Надеемся, что эта помощь

Смежные вопросы