Buenas el caso es que estoy haciendo un aplicación de consola, para un rotado de Log,pero me falla el parado de los servicios y no entiendo el porque,me pueden orientar.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceProcess;
namespace ServiceProcess
{
class Program
{
static void Main(string[] args)
{
string nameservice;
nameservice = "KMService";
Console.WriteLine("Deteniendo servicio");
Detener(nameservice);
Console.WriteLine("Servicio detenido");
Console.ReadKey();
}
static void Detener(string nameservice)
{
string serviceName = nameservice;
ServiceController service = new ServiceController(serviceName);
int timeoutMilliseconds = 5000;
TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
service.Stop(); //AQUI FALLA
service.WaitForStatus(ServiceControllerStatus.Running, timeout);
}
}
}
Saludos
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.
El error que me da es este,http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k(EHInvalidOperation);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5);k(DevLang-csharp)&rd=true (http://,http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k(EHInvalidOperation);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.5);k(DevLang-csharp)&rd=true), en Visual Basic.Net ya lo hice en su dia pero quería aprender en C#:
(http://img594.imageshack.us/img594/4845/20130423141345consoleap.jpg)
Saludos. ::)
Bueno para quien le interese,es que la libreria System.ServiceProcess no funciona en 64 bits,lo he probado en 32 bits y funciona perfectamente. No se si es porque es windows 8 o por que el sistema es 64 bits.
¿sabeis como se pueden buscar la libreria similar en 64 bits?
Valdria esta ?http://es.originaldll.com/file/system.serviceprocess.resources.dll/8270.html (http://es.originaldll.com/file/system.serviceprocess.resources.dll/8270.html)
Donde se pondria?
En el caso que se llamen igual se puede renombrar añadiendo 64 bits al final?
Saludos.
Cita de: Heisenberg_w0rms en 24 Abril 2013, 12:10 PM
Bueno para quien le interese,es que la libreria System.ServiceProcess no funciona en 64 bits,lo he probado en 32 bits y funciona perfectamente. No se si es porque es windows 8 o por que el sistema es 64 bits.
Hola, solo quiero decirte que lo de los 64bits es una tontería, yo uso Windows 7 de 64 bits y como ves te mostré un código funcional.
Lo de que no te funcione porque séa Windows 8 también parece otra tontería, si no fuesen compatible las classes del FW en Windows 8 sería para darle una tremenda hostia a Microsoft, pero eso ya no te lo puedo confirmar.
un saludo!
EDITO: Quizás si pruebas mi aplicación te pueda sacar de dudas si la "System.Serviceprocess" funciona en Win8 de 64 bits o no: http://foro.elhacker.net/net/aporte_aeroswitcher-t389187.0.html;msg1849223#msg1849223