EventLog Class

08/04/2005 - 09:24 por McKool | Informe spam
Hola.

Estoy haciendo un Servicio de windows el cual utiliza un puerto serial.
Cuando el servicio comienza a funcionar, conecta un determinado puerto con
el que interactua y lo desconecta al finalizar (Eventos OnStart, OnStop y
OnShutdown). Utilizo una instancia de la clase EventLog para escribir
informacion sobre lo que pasa dentro del Servicio, como por ejemplo anotar
los eventos de connexión y desconexión del puerto y de una base de datos que
tambine utilizo.

El problema esta en que cuando intento apagar windows y el servicio aun esta
activo, windows se cuelga despues de finalizar todo, es decir, despues de
que desaparece el mensaje de "Windows se esta Cerrando". Al final solo
queda la pantalla azul y el puntero inmobil del raton.

Me he asegurado de que el puerto se desconecte y de que la base de datos
tambien se desconecte en el momento que el evento OnShutdown es recibido.
Para estar seguro de eso he utilizado MessageBox ya que en este punto
Eventlog no escribe nada.

Si no utilizo esta clase, la computadora se apaga adecuadamente, asi que
asumo que no etoy utilizando bien dicha clase. Podria alguien decirme la
manera correcta de utilizarla o donde puedo encontrar informacion al
respecto? los ejemplos que tengo hacen exactamente lo mismo que hago yo.

Gracias de antemano por cualquier ayuda que puedan darme.

KW.

Preguntas similare

Leer las respuestas

#1 Miguel Angel Campos
10/04/2005 - 11:59 | Informe spam
Pero con el MessageBox no te puede aparecer nada, puesto que estas en un
Servicio y no tiene interfaz de usuario, y ademas se quedará esperando que
pulses el botón de aceptar del MessageBox que no puedes ver.

Puedes poner un ejemplo reducido del código.

Un Saludo,

Miguel Angel Campos, MCP

"McKool" escribió en el mensaje
news:
Mostrar la cita
que
Mostrar la cita
esta
Mostrar la cita
#2 Miguel Angel Campos
11/04/2005 - 09:14 | Informe spam
Es posible que cuando se esté cerrando tu servicio, ya no esté disponible el
servicio que captura los eventos del sistema. Esta situación no estoy muy
seguro que sea la causa, pero es posible.
Podrías probar a establecer tu servicio como dependiente del servicio
Eventlog, mediante la propiedad ServicesDependedOn de la clase
ServiceInstaller.

Con respecto al tema del MessageBox, no había visto nunca esa propiedad,
pero hay que tener mucho cuidado con eso puesto que no siempre está logeado
un usuario.
Un Saludo,

Miguel Angel Campos
MCAD.NET

"McKool" escribió en el mensaje
news:
Mostrar la cita
Si se puede, ya que el MessageBox tiene una opcion llamada
ServiceNotification especialmente hecha para eso.

Mostrar la cita
Cierto, y esa es la idea, solo queria estar seguro de que estaba haciendo
las cosas que debe, eso es temporal, no es para dejarlo alli.

Pero ya encontre parte de la solucion. Ya la computadora reinicia bien, el
problema era que no estaba llamando al evento base, es decir,
base.OnShutdown(). Sin embargo aun no se porque esos ultimos pasos de mi
servicio no son escritos en el Log cuando windows se esta reiniciando.

Mostrar la cita
protected override void OnShutdown()
{
MyKlima.Close();
DisconnectDataBase(); // Aqui dentro tambien mando a escribir al
eventlog.
MyEvents.WriteEntry("The Computer is being shutting down. Application will
be terminated.",EventLogEntryType.Warning);
base.OnShutdown ();
}
Esos dos ultimos eventos no son escritos en el EventLog.
Gracias y Saludos
KW


"Miguel Angel Campos" schrieb im
Newsbeitrag news:
Mostrar la cita
con
Mostrar la cita
anotar
Mostrar la cita
#3 McKool
12/04/2005 - 11:34 | Informe spam
Cierto, me habia imaginado eso pero no sabia lo de la propiedad de
dependencia, gracias, lo voy a probar.

Con respecto a lo del MessageBox, esto es lo que aparece en la ayuda:

/**********
MB_SERVICE_NOTIFICATION
Windows NT/2000/XP: The caller is a service notifying the user of an event.
The function displays a message box on the current active desktop, even if
there is no user logged on to the computer.
Terminal Services: If the calling thread has an impersonation token, the
function directs the message box to the session specified in the
impersonation token.

If this flag is set, the hWnd parameter must be NULL. This is so the message
box can appear on a desktop other than the desktop corresponding to the
hWnd.

For more information on the changes between Microsoft® Windows NT® 3.51 and
Windows NT 4.0, see Remarks

/**********
Como ves, tampoco hace falta un usuario logeado. Para usarlo tienes que
tomar la version sobrecargada del MessageBox que permite incluir opciones y
utilizas esta:
System.Windows.Forms.MessageBoxOptions.ServiceNotification

Gracias nuevamente
Keneth


"Miguel Angel Campos" <SPAMmacampos ARRUBA .idesarrollaSPAM.com> schrieb im
Newsbeitrag news:
Mostrar la cita
#4 Miguel Angel Campos
12/04/2005 - 21:36 | Informe spam
Nos hemos ayudado mutuamente.
Los grupos de noticias son grandes!!!
Un Saludo,

Miguel Angel Campos
MCAD.NET

"McKool" escribió en el mensaje
news:
Mostrar la cita
event.
Mostrar la cita
message
Mostrar la cita
and
Mostrar la cita
y
Mostrar la cita
im
Mostrar la cita
disponible
Mostrar la cita
muy
Mostrar la cita
un
Mostrar la cita
haciendo
Mostrar la cita
mi
Mostrar la cita
will
Mostrar la cita
serial.
Mostrar la cita
OnStop
Mostrar la cita
datos
Mostrar la cita
aun
Mostrar la cita
solo
Mostrar la cita
datos
Mostrar la cita
que
Mostrar la cita
yo.
Mostrar la cita
Ads by Google
Search Busqueda sugerida