PDA

Ver la Versión Completa : Aplicación como Servicio


Rysiu
15-01-2006, 13:16:03
Hola a todos:

Quiero hacer una aplicacion que funcione como servicio en Windows, de esta manera al aplicacion estara funcionando sin necesidad de iniciar sesion en Windows. Ademas de esto, quiero que cuando se inicie sesion, salga un icono en "al lado del reloj de windows" de mi aplicacion para que el usuario pueda interactuar con ella.

Bien, el problema es que el servicio no me arranca. Ahora mismo el unico codigo que he añadido al proyecto de servicio es:


procedure TService1.ServiceExecute(Sender: TService);
begin
try
TrayIcon1.Visible:=True;
i:=1;
while not Terminated do begin
Sleep(10000);
end;
finally
TrayIcon1.Visible:=False;
end;
end;


¿Alguna idea?


Muchas gracias

dec
15-01-2006, 13:37:31
Hola,


Quiero hacer una aplicacion que funcione como servicio en Windows, de esta manera al aplicacion estara funcionando sin necesidad de iniciar sesion en Windows.

Eso creo que depende del propio Servicio, de su necesidad. Quiero decir que es posible determinar el "tipo de cuenta" en que se ejecutará el Servicio, es decir, en una de las cuentas "User", "Local Service", "Network Service" o "Local System". No estoy diciendo que tenga muy claro el alcanze de cada una de estas "cuentas" en que puede ejecutarse un Servicio de Windows, de hecho estoy refrescando mi memoria con la ayuda de Visual Studio y "inspector de objetos" mostrando las propiedades de un objeto "serviceProcessInstaller".


Ademas de esto, quiero que cuando se inicie sesion, salga un icono en "al lado del reloj de windows" de mi aplicacion para que el usuario pueda interactuar con ella.

Según he leído en algún libro y he podido comprobar en ciertas aplicaciones (por ejemplo FireBird) lo que se hace es una aplicación que sea la que medie entre el usuario y el Servicio de Windows de marras. Es decir, una cosa es el Servicio de Windows y otra la aplicación que ayude al usuario a interactuar con el Servicio de Windows.

Siendo así no tendrás problema en que dicha aplicación se iniciara junto a Windows y mostrase un icono en la bandeja del sistema: son cosas relativamente sencillas de conseguir con Delphi. Otro tema sería que el propio Servicio se dedicara a intereactuar con el usuario, pero, ya digo que esto no es lo común ni lo más acertado parece ser.

OSKR
15-01-2006, 15:58:52
Tal vez si arranca, pero muere de una vez, eso suele pasar!!! suponiendo q ya sabes como correrlo, mira la ayuda del evento OnExecute y del OnStart, sino creas algun hilo ahí, el servicio morirá, tienes q aplicar un true a la propiedad Interactive y generar el Icono cuando el Explorer ya este cargado o te puede generar una Excepcion, para esto lista los procesos actuales y chekea si esta el explorer o miras si ya ha llegado la señal de la carga de este ( este ultimo lo Explico Román hace algún tiempo ), por lo general se coloca un ciclo infinito donde previamente se carga una hebra para hacer lo q se qiere y se habilita la posibilidad de ser parado, continuado, etc... aqi este tema ya se ha tratado, por falta de tiempo no te puedo poner los link

dec
15-01-2006, 18:22:15
Hola,

Si tenemos la necesidad de desarollar un Servicio de Windows (y recalco esto porque este tipo de aplicaciones no es el habitual, pasa un poco me temo que con las aplicaciones multi-hilo, que, de no ser necesarias, no tienen sentido, claro está) creo que mejor será dejar al Servicio hacer lo que tenga que hacer.

Esto es, si necesitamos además que el usuario pueda interactuar con el Servicio de Windows, y los programas que para esta tarea cuenta Windows no nos parecen suficientes, de acuerdo, prográmese una aplicación que sea la que medie entre el usuario y el Servicio de Windows.

Porque no veo dónde está lo positivo de que el Servicio tenga que estar pendiente de si el proceso "explorer" se ha iniciado para así mostrar un icono en la bandeja del sistema, por ejemplo. Está claro que el el usuario no ha iniciado una sesión este no va a interactuar con el Servicio. Por lo tanto, hagamos una aplicación que se iniciará (si es menester) cuando se inicie Windows, esto es, cuando el usuario inicie una sesión.

Y que sea ese programa el que trate con el Servicio de Windows, es decir, lo pueda pausar, reanudar, poner en marcha, parar, cambiar su forma de inicio, etc., etc., etc. ¿No? ;)

OSKR
15-01-2006, 18:45:50
Porque no veo dónde está lo positivo de que el Servicio tenga que estar pendiente de si el proceso "explorer"
Donde se supone q se mostrará el icono sin haber barra?
Si tenemos la necesidad de desarollar un Servicio de Windows (y recalco esto porque este tipo de aplicaciones no es el habitual, pasa un poco me temo que con las aplicaciones multi-hilo, que, de no ser necesarias, no tienen sentido, claro está) creo que mejor será dejar al Servicio hacer lo que tenga que hacer.

Eso lo aclara la ayuda, además el servicio por lo general se carga una vez... el resto de peticiones son hebras del mismo.
Está claro que el el usuario no ha iniciado una sesión este no va a interactuar con el Servicio. Por lo tanto, hagamos una aplicación que se iniciará (si es menester) cuando se inicie Windows, esto es, cuando el usuario inicie una sesión.

Eso se hace manipulando registros del sistema pero

Originalmente Escrito por Rysiu
Quiero hacer una aplicacion que funcione como servicio en Windows, de esta manera al aplicacion estara funcionando sin necesidad de iniciar sesion en Windows.

no se puede depender de la sesión, cuando se cierra la sesión una aplicación de este tipo MUERE.
Y que sea ese programa el que trate con el Servicio de Windows, es decir, lo pueda pausar, reanudar, poner en marcha, parar, cambiar su forma de inicio, etc., etc., etc. ¿No? ;)
Eso depende....lógicamente la hebra decide cuando terminar, pero el administrador DEBERIA PODER DECIDIR cuando pararlo.