Parar / iniciar o serviço no código no Windows 7

Eu estou tentando escrever um aplicativo e serviço que monitorar um determinado conjunto de serviços e a) garante que eles estão em execução eb) com base em determinados critérios, reiniciá-los conforme necessário.

Eu continuo correndo em um erro de acesso negado.

Se eu simplesmente percorrer os processos no sistema, encontre o que eu quero assim:

foreach (ServiceController sc in ServiceController.GetServices())
   {                
       if(sc.ServiceName == "MyServiceName")
       {
            sc.Stop();
            sc.WaitForStatus(ServiceControllerStatus.Stopped, new TimeSpan(0, 0, 60));
            sc.Start(); 
       }            
   }   

Eu recebo:

InnerException: System.InvalidOperationException
        Message="Cannot open My Service service on computer '.'."
        Source="System.ServiceProcess"
        StackTrace:
             at System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess)
             at System.ServiceProcess.ServiceController.Stop()
             at lib.ListServices() in D:\lib.cs:line 552
             at lib.Init() in D:\lib.cs:line 56
   InnerException: System.ComponentModel.Win32Exception
             Message="Access is denied"
             ErrorCode=-2147467259
             NativeErrorCode=5
             InnerException: 

Eu tentei representar um usuário, tentei fazer o mesmo código de outro serviço que está sendo executado como um serviço do sistema. Nenhum dos quais foi realmente capaz de afetar o serviço. Se começou, não posso pará-lo. Se estiver parado, não posso iniciá-lo. Eu sei que tudo isso está relacionado a permissões. Não estou encontrando um mecanismo que me permita controlar o serviço.

Qualquer ajuda seria muito apreciada.

questionAnswers(4)

yourAnswerToTheQuestion