Claro, no puedes iniciar un servicio que ya se encuentra iniciado, ni detener uno que ya está detenido.
De todas formas no dás ningún detalle acerca del error, solo dices que "falla", podrías haber mostrado la excepción porque no somos magos para adivinar lo que ocurre.
Pero deduzco que el problema es ese porque en tu código no compruebas el estado del servicio. solo puede ser eso, o que el servicio no se pueda detener por alguna dependencia.
Usa un convertidor online de VBNET a C# con esta función que hice, y listo:
#Region " Change Service Status "
' [ Change Service Status Function ]
'
' // By Elektro H@cker
'
' Instructions :
' Add a reference for "System.ServiceProcess"
'
' Examples :
' MsgBox(Change_Service_Status("Temas", Service.StopIt))
' MsgBox(Change_Service_Status("Temas", Service.RunIt, True))
Public Enum Service
RunIt = True
StopIt = False
End Enum
Function Change_Service_Status(ByVal ServiceName As String, _
ByVal Run As Service, _
Optional Wait As Boolean = False) As Boolean
Try
Dim Service As New System.ServiceProcess.ServiceController(ServiceName)
Select Case Service.Status
Case System.ServiceProcess.ServiceControllerStatus.Stopped And Run
Service.Start()
If Wait Then Service.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running)
Case System.ServiceProcess.ServiceControllerStatus.Running And Not Run
Service.Stop()
If Wait Then Service.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped)
End Select
Service.Dispose()
Return True
Catch ex As Exception
' Throw New Exception(ex.Message)
Return False
End Try
End Function
#End Region
Saludos.