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:
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.


Respuesta Responder a este mensaje
#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:
Pero con el MessageBox no te puede aparecer nada, puesto que estas en un
Servicio y no tiene interfaz de usuario,



Si se puede, ya que el MessageBox tiene una opcion llamada
ServiceNotification especialmente hecha para eso.

y ademas se quedará esperando que
pulses el botón de aceptar del MessageBox que no puedes ver.



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.

Puedes poner un ejemplo reducido del código.


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:



Un Saludo,

Miguel Angel Campos, MCP

"McKool" escribió en el mensaje
news:
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.






Respuesta Responder a este mensaje
#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:
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:
Pero con el MessageBox no te puede aparecer nada, puesto que estas en un
Servicio y no tiene interfaz de usuario,



Si se puede, ya que el MessageBox tiene una opcion llamada
ServiceNotification especialmente hecha para eso.

y ademas se quedará esperando que
pulses el botón de aceptar del MessageBox que no puedes ver.



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.

Puedes poner un ejemplo reducido del código.


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:





Un Saludo,

Miguel Angel Campos, MCP

"McKool" escribió en el mensaje
news:
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.










Respuesta Responder a este mensaje
#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:
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:
> 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:
>> Pero con el MessageBox no te puede aparecer nada, puesto que estas en


un
>> Servicio y no tiene interfaz de usuario,
>
> Si se puede, ya que el MessageBox tiene una opcion llamada
> ServiceNotification especialmente hecha para eso.
>
>> y ademas se quedará esperando que
>> pulses el botón de aceptar del MessageBox que no puedes ver.
>
> 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.
>
>> Puedes poner un ejemplo reducido del código.
> 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:
>>
>
>>
>> Un Saludo,
>>
>> Miguel Angel Campos, MCP
>>
>> "McKool" escribió en el mensaje
>> news:
>>> 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.
>>>
>>>
>>
>>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida