Estoy escribiendo una serie de servicios de Windows. Quiero que fallen si se producen errores durante el inicio (en el método OnStart()
). Había asumido que simplemente arrojando un error en OnStart()
haría esto, pero estoy descubriendo que en su lugar se "Inicia" y me presenta un mensaje que dice "El servicio ha comenzado, pero está inactivo. ¿Es esto correcto?" (Paráfrasis). ¿Cómo manejo el error por lo que realmente no puede iniciar el servicio?excepción de control en el inicio del servicio
Respuesta
si está ejecutando .NET 2.0 o superior, puede usar ServiceBase.Stop para detener el servicio de OnStart. De lo contrario, llame a Stop desde un nuevo hilo.
ref [devnewsgroups] (
http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx)
(grupo de noticias ido)
Mueva toda su lógica de inicio a un método diferente y genere excepciones (o llame a OnStop) desde ese método independiente.
OnStart tiene algunas rarezas al arrancar. Descubrí que si OnStart() no tiene más de una línea, no aparece el mensaje "El servicio se inició y luego se detuvo. Algunos servicios se detienen automáticamente si no tienen trabajo pendiente", y las excepciones arrojadas terminarán. procesar y registrarse en el registro de eventos de la aplicación.
También con el método de inicio independiente, puede utilizar una técnica como esta para depurarla sin adjuntarla. http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx
Si lo principal que queremos es que la ventana Servicios de informar que hubo un error, por lo que' he intentado (.net 3.5 en Windows 7), la única forma de hacerlo es estableciendo el código de salida. Recomiendo configurarlo en 13816, ya que esto da como resultado el mensaje "Se ha producido un error desconocido". Ver the windows error codes.
El ejemplo siguiente logra tres cosas. 1 - la configuración de ExitCode da como resultado un mensaje útil para el usuario final. No afecta el registro de la aplicación de Windows, pero sí incluye un mensaje en el registro del sistema. 2 - Calling Stop da como resultado un mensaje "Service successfully stopped" en el registro de la aplicación. 3 - lanzar los resultados de la excepción en una entrada de registro útil en el registro de la aplicación.
protected override void OnStart(string[] args) {
try {
// Start your service
}
catch (Exception ex) {
// Log exception
this.ExitCode = 13816;
this.Stop();
throw;
}
}
13816 está etiquetado como un error IPSEC por lo que no se aplica exactamente, pero cualquier int no distinto de cero se considera un error por el Administrador de control de servicios. Creo que el significado del código depende del servicio en sí. – xr280xr
Ese es un muy buen punto. Tal vez, el código 1064 sería mejor. (ERROR_EXCEPTION_IN_SERVICE - Se produjo una excepción en el servicio cuando se maneja la solicitud de control). La idea principal para mí es mostrarle al usuario un mensaje que es de alguna utilidad, y especialmente no engañoso. – Sean
Las partes clave están configurando el código de salida y el lanzamiento. No es necesario el 'Stop();' - el manejador de excepciones en ServiceBase hace esto. –
- 1. actividad de inicio androide del servicio
- 2. Servicio de inicio en Android
- 3. Ventana emergente de inicio del servicio
- 4. Error de inicio del servicio WCF "Esta colección ya contiene una dirección con el esquema http"
- 5. Capturar excepción personalizada del servicio web ASMX
- 6. Excepción ResultSet: antes del inicio del conjunto de resultados
- 7. Excepción de inicio de Python
- 8. Servicio de inicio de BroadcastReceiver
- 9. Servicio de detención/inicio en el código en Windows 7
- 10. ¿Cómo obtengo un control del botón Inicio en Windows 7?
- 11. Error 1053 el servicio no respondió a la solicitud de inicio o control
- 12. ¿Cuál es la forma correcta de deshabilitar un servicio OSGi al inicio del servicio?
- 13. C# Servicio de Windows Tiempo de espera en el inicio
- 14. Control de la secuencia de inicio de un servicio de Windows
- 15. System.Net.UnsafeNclNativeMethods.OSSOCK.recv servicio web excepción
- 16. Cómo cambiar el tipo de inicio del servicio de Windows en un instalador de WiX
- 17. Parametrizar la opción de inicio del servicio en el instalador de WiX
- 18. Aplicación de Android Cómo retrasar su inicio de servicio en el arranque del teléfono
- 19. Excepción no controlada en el servicio de Windows
- 20. cómo rastrear si un proceso determinado arroja una excepción, usando el servicio de Windows en C#
- 21. Poniendo el directorio de inicio bajo control de fuente (hg)
- 22. ¿Dónde está el método de inicio de un servicio WCF?
- 23. de Windows fallo de inicio del servicio: No se puede iniciar el servicio de la línea de comandos o depurador
- 24. Manejo de excepciones en el servicio RIA
- 25. Alojamiento del servicio WCF en el servicio de Windows
- 26. Excepción del protocolo WCF
- 27. control de scala 2.8 Excepción: ¿cuál es el punto?
- 28. Servicio de reposo Silverlight, excepción de seguridad
- 29. Bash init - servicio de inicio bajo el usuario específico
- 30. Excepción de puntero nulo que inicia el servicio de intención
el dominio de referencia se ha ido – hultqvist
Internet Archive al rescate: https://web.archive.org/web/20070730021813/http://www.devnewsgroups.net/group/microsoft.public.dotnet. framework/topic50404.aspx –