Problema en servicio credo en delphi con windows 8
#1
Posted 16 December 2015 - 11:59 AM
#2
Posted 16 December 2015 - 02:34 PM
Correcto, no hay mucho mas que puedas hacer si queres mantener un servicio
Hasta donde se, es por cuestiones de seguridad
La unica alternativa es conviertiendo el servicio en una aplicacion. Podes mantenerla oculta para que no "moleste"
#3
Posted 16 December 2015 - 03:10 PM
Correcto, no hay mucho mas que puedas hacer si queres mantener un servicio
Hasta donde se, es por cuestiones de seguridad
La unica alternativa es conviertiendo el servicio en una aplicacion. Podes mantenerla oculta para que no "moleste"
ups, si me temía eso.
gracias y saludos
#4
Posted 16 December 2015 - 04:42 PM
Cuando necesito hacer algo así, creo una aplicación y conecto por sockets, para que en la aplicación muestre los mensajes del servicio, igualmente se puede hacer que desde la aplicación se envíen datos o mensajes al servicio.
Pero definitivamente si quieres un servicio, el servicio no puede y no debe tener ventanas que se muestren, ni ninguna interacción con el usuario.
Es importante que utilices un protocolo UDP, ya que el TCP espera respuesta y esto daña el servicio.
Saludos.
Edited by genriquez, 16 December 2015 - 04:43 PM.
#5
Posted 16 December 2015 - 05:12 PM
Voy a hablar desde mi ignorancia en el tema ya que nunca he diseñado un servicio. Y admito que tampoco tengo alguna idea de a que se refieren por "mensaje" que envía un servicio.
Hasta donde tengo entendido, por lógica, un servicio es justamente un proceso que está activo en 2do plano, que requiere entrar en funcionamiento con el inicio del SO, y que no requiere forzosamente de una interacción con el usuario, y por tanto evitar el riesgo de que accidentalmente éste lo finalice prematuramente afectando asi el funcionamiento y el uso para el cual fue diseñado. Por tanto no tiene sentido práctico alguno que ofrezca una interfaz.
Que luego exista alguna aplicación que pueda interactuar con el servicio ya es otra cosa.
El caso de Firebird es peculiar. Su instalador (al menos en FB 1.5) pregunta si desea correr el Server/Guardian como Servicio (recomendado) o bien como Aplicación.
Saludos,
#6
Posted 16 December 2015 - 05:53 PM
Yo por mensajes y ventanas entiendo Forms y cuadros de dialogo (ShowMessage, excepciones)
Y si, estamos de acuerdo en que un servicio deberia ser invisible
#7
Posted 16 December 2015 - 06:45 PM
Efectivamente Delphius el propósito de un servicio es como lo mencionas, sin embargo a veces y sobre todo en tiempo de ejecución se requiere ver un log del servicio, el cual lo puedes hacer directamente a un archivo de Log o como mencioné con mensajes por sockets a una aplicación para ver que pasa dentro del servicio, especialmente porque es muy difícil depurar este tipo de aplicaciones.
Yo en particular tengo un servicio y una interfaz gráfica, la cual muestra cuantos usuarios hay conectados y cierta estadística, lo que hace el servicio es enviar esta información por Mensajes UDP al localhost a un puerto en particular, y la interfaz gráfica muestra dicha información. Eventualmente si requiero reiniciar algún estado dentro del servicio lo puedo hacer igualmente por sockets, Ej. limpiar el caché, ya que gran parte de la información la subo a memoria.
Saludos.
#9
Posted 17 December 2015 - 08:40 AM
Buen día, gracias por tomarse un tiempito para contestar esta duda.
Delphius, efectivamente esa es la finalidad de un servicio, pero también hay "servicios interactivos", que precisamente muestran una ventana creada a partir de un TForm donde se puede preguntar al usuario deseas que se ejecute de esta manera o de otra manera, etc. y estos servicios hasta windows xp andaban sin ningún problema.
genriquez, gracias por los comentarios, voy a tomarlos en cuenta
escafandra, muy interesante tu aporte, lo voy a revisar y ojala pueda ayudarme a correr este servicio ya que hacerlo como me propone genriquez no creo que el cliente lo acepte, no al menos en tiempo y costo que se pueda elevar. muchas gracias.
#10
Posted 17 December 2015 - 10:32 AM
El enlace que te pongo es para mostrar como ejecutar una app gráfica desde un servicio. Un servicio no puede tener interface gráfico desde Vista, y si lo tiene no se verá, porque se ejecuta en un escritorio ajeno al usuario.
Saludos.