Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   TService y TForm (https://www.clubdelphi.com/foros/showthread.php?t=60655)

Softweb 09-10-2008 01:12:40

TService y TForm
 
Hola tengo una aplicacion de mantenimiento que funciona con un componente TrayIcon de forma que cuando se ejecute se iconize en la barra y que funciona perfectamente.

El problema surge cuando lo e tenido que instalar en un Windows Server 2003 que para que funcione la e tenido que convertir en un servicio el cual funciona bien hasta que llamo a el Form con Show o ShowModal para que el TrayIcon instale el icono en la barra, entonce me sale un error de windows diciendo que el servicio esta intentando mostrar ventana de mensaje no permitido, .

Tiene alguien codigo de un Servicio que maneje Forms?

Saludos y gracias.

JAV 15-10-2008 16:07:05

Me parece que el servicio debería guardar la información en disco y otra aplicación GUI (Graphic User Interface) con un formulario debería leerla y mostrarla.

fjcg02 15-10-2008 17:25:55

Un servicio no puede interactuar con el escritorio porque no tiene acceso a él. Como puede estar arrancado con la sesión cerrada, no tiene capacidad para acceder a la barra de tareas ( tray icon)
El servicio deberá ser lo suficientemente inteligente para saber si existe una sesión de usuario abierta , y en ese caso lanzar otro proceso, que será el que ponga el trayicon. Para eso podrías utilizar un timer, que cada x tiempo mire si hay algún usuario con el escritorio abierto.

Desgraciadamente, nunca he intentado eso, por lo que no puedo ayudarte.

Suerte y saludos

Softweb 17-10-2008 00:19:23

Cita:

Empezado por fjcg02 (Mensaje 320251)
Un servicio no puede interactuar con el escritorio porque no tiene acceso a él. Como puede estar arrancado con la sesión cerrada, no tiene capacidad para acceder a la barra de tareas ( tray icon)
El servicio deberá ser lo suficientemente inteligente para saber si existe una sesión de usuario abierta , y en ese caso lanzar otro proceso, que será el que ponga el trayicon. Para eso podrías utilizar un timer, que cada x tiempo mire si hay algún usuario con el escritorio abierto.

Desgraciadamente, nunca he intentado eso, por lo que no puedo ayudarte.

Pues te equivocas as dado en el clavo del problema y incluso la solucion ya que funciona.

Muchas gracias.
Saludos.

fjcg02 17-10-2008 13:24:23

Podrías darnos una pequeña explicación ? Es por culturilla general, y porque "me equivoco y doy la solución" ¿?.;)
No he trabajado con servicios, por lo que no puedo darte más información, pero generalmente el problema es el que comentaba.

Saludos

Softweb 20-10-2008 17:41:01

Cita:

Empezado por fjcg02 (Mensaje 320716)
Podrías darnos una pequeña explicación ? Es por culturilla general, y porque "me equivoco y doy la solución" ¿?.;)
No he trabajado con servicios, por lo que no puedo darte más información, pero generalmente el problema es el que comentaba.

Saludos

Hola
Desia que te equivocabas al decir el final de esta frase

Cita:

Desgraciadamente, nunca he intentado eso, por lo que no puedo ayudarte.
y me diste la solución con la frase.

Cita:

Un servicio no puede interactuar con el escritorio porque no tiene acceso a él
Ya que el servicio siempre reventaba al intentar mostrar la ventana, por lo que pensé que tal vez el error es que el servicio no tenia acceso a la ventana o mejor dicho la ventana acceso a su padre (el servicio), por lo cual quite la declaración publica de la variable de la ventana y la declare como variable de la clase del servicio y "funciono", funciona perfectamente,

Lo de mirar si tiene una sesion abierta para poner el trayicon ya lo realiza el servicio por si solo.

Saludos y gracias


La franja horaria es GMT +2. Ahora son las 12:35:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi