Ir al contenido


Foto

Crear Servicio de windows


  • Por favor identifícate para responder
27 respuestas en este tema

#1 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 07 enero 2009 - 03:45

Hola amigos

Tengo otro "detalle" con el programa donde pregunto sobre multihilos.

Resulta que este programa solo puede ser ejecutado cuando se entra a la sesión de windows, sin embargo, necesito que este programa funcione como servicio y que no requiera de que el usuario tenga que iniciar una sesión en la computadora.

He visto algunas publicaciones donde se habla de esto, pero no he podido comprender como es que se hace esto.

Ojala y alguien pudiera orientarme acerca de esto.

Salud OS
  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 07 enero 2009 - 03:48

.... commamidora.

...


Esto sigue causandome gracia  :p
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 07 enero 2009 - 03:54

jajajajaa, tendremos que quitar esa palabra del diccionario jajajaja

Salud OS

Sorry Cannabis y cHackAll, :p
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 07 enero 2009 - 03:56

jajajajaa, tendremos que quitar esa palabra del diccionario jajajaja

Salud OS

Sorry Cannabis y cHackAll, :p


A ver, vamos a probar :D :D

Computadora (y)
Amputar (y)

Salud OS
  • 0

#5 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 07 enero 2009 - 04:53

diputado
  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 07 enero 2009 - 04:57

mi amor


:D :D :D

Después de la amable sugerencia de Jose, se han eliminado esas palabras del diccionario :p

Salud OS
  • 0

#7 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 07 enero 2009 - 05:02


puta


:D :D :D

Después de la amable sugerencia de Jose, se han eliminado esas palabras del diccionario :p

Salud OS


xxx"palabra"xxx Ok
" palabra " NO ?

ya estoy divagando!
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 07 enero 2009 - 05:05


xxx"palabra"xxx Ok
" palabra " NO ?

ya estoy divagando!


Intenta de nuevo :D :D :D

Salud OS
  • 0

#9 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 07 enero 2009 - 07:27

Hola,
Volviendo al contexto original de este hilo... que haremos con este vicio  ^o|
te comento ego que tenia un documento sobre como hacer esto, pero no lo encontré  :|, sin hembargo encontre este articulo en la web muy interesante y ya que te defiendes con el ingles  ;)

http://www.devarticl...vice-in-Delphi/
  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 07 enero 2009 - 07:30

Muchas gracias amigo felipe

Ya esta marcado en mis tutoriales :)

Salud OS
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 22 junio 2010 - 01:26

Hola,

Pues si, resucitando muertos :D :D :D, este asunto lo tengo pendiente desde hace mucho tiempo (ENE-2009 :s) y ahora que lo he retomado sigo teniendo problemas.

Bueno, resulta que estoy haciendo un servicio para ejecutar un programa X, el problema es que el ejecutable está listado en el Administrador de Tareas pero no es visible (Les adjunto una imagen), éste es el código que estoy utilizando dentro del servicio.



delphi
  1. procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
  2. begin
  3.   ShellExecute(0,nil,'c:\Windows\NOTEPAD.exe',nil, nil, SW_SHOWNORMAL);
  4. end;



Seguramente tengo un problema en los parámetros que estoy utilizando pero no se cual :(

La otra problemática que tengo es como cerrar ese mismo programa cuando detengo el servicio.

A ver si alguien me puede ayudar con este penoso asunto :D

Salud OS

Archivos adjuntos


  • 0

#12 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 22 junio 2010 - 02:20

Es normal que si ejecutas un programa desde un servicio no lo veas, tienes que tener en cuenta que se ejecuta en una sesión diferente a la del usuario.

Una solución es marcar en las propiedades del servicio una opción que dice algo asi "Permitir a los servicios que interactuen con el escritorio", aunque es una opción que no te recomiendo. Microsoft mismo lo desaconseja y a partir de windows vista esta opción ha desaparecido.

Lo mejor es mantener aislados los servicios de los programas de usuario. Para eso lo mejor es crear un servicio y un ejecutable que lo puedes abrir en el inicio de sesion de cada usuario y que sea este quien interactue con el usuario y se comunique con el servicio (para la comunicación entre el servicio y el programa de usuario te recomiendo TCP, pero hay mas alternativas)
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 22 junio 2010 - 03:18

Es normal que si ejecutas un programa desde un servicio no lo veas, tienes que tener en cuenta que se ejecuta en una sesión diferente a la del usuario.

Una solución es marcar en las propiedades del servicio una opción que dice algo asi "Permitir a los servicios que interactuen con el escritorio", aunque es una opción que no te recomiendo. Microsoft mismo lo desaconseja y a partir de windows vista esta opción ha desaparecido.

Lo mejor es mantener aislados los servicios de los programas de usuario. Para eso lo mejor es crear un servicio y un ejecutable que lo puedes abrir en el inicio de sesion de cada usuario y que sea este quien interactue con el usuario y se comunique con el servicio (para la comunicación entre el servicio y el programa de usuario te recomiendo TCP, pero hay mas alternativas)


Vaya, pero entonces como puedo hacer que mi aplicación se ejecute como servicio, es decir, sin tener que iniciar sesión de usuario :(

Salud OS
  • 0

#14 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 22 junio 2010 - 04:05

Como te he expuesto seoane, una aplicación que corre como servicio no puede interactuar con el usuario directamente. No tiene sesión de usuario y por tanto su escritorio no es visible. Cada aplicación que nazca del servicio tendrá los mismos vicios.

Quizás lo que buscas es que se ejecute en cualquier sesión que se abra, para lo que basta que lo introduzcas en el registro:



delphi
  1. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\



En esta clave añades un valor tipo cadena con el nombre del programa y sus parámetros.

Saludos.

  • 0

#15 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 22 junio 2010 - 04:12

Como te he expuesto seoane, una aplicación que corre como servicio no puede interactuar con el usuario directamente. No tiene sesión de usuario y por tanto su escritorio no es visible. Cada aplicación que nazca del servicio tendrá los mismos vicios.

Quizás lo que buscas es que se ejecute en cualquier sesión que se abra, para lo que basta que lo introduzcas en el registro:



delphi
  1. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\



En esta clave añades un valor tipo cadena con el nombre del programa y sus parámetros.

Saludos.


Gracias escafandra, lo que necesito es que mi programa se ejecute sin tener que iniciar sesión, les explico, si por alguna causa la computadora se reinicia y no es atentida por un usuario, mi sistema no se inicia y se pierde información hasta que se inicia sesión, por esa razón es que es de vital importancia que se inicie y reciba la información que le llega aún sin iniciar una sesión.

Voy a intentar sobre la cuestión de la comunicación a través de TCP.

Salud OS

  • 0

#16 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 22 junio 2010 - 04:18

...Voy a intentar sobre la cuestión de la comunicación a través de TCP.


Me parece una buena idea.  :)

Saludos.
  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 22 junio 2010 - 04:19


...Voy a intentar sobre la cuestión de la comunicación a través de TCP.


Me parece una buena idea.  :)

Saludos.


:) a mi también, ahora a ver como salgo de esta :D :D :D aunque me parece que este es un tema conceptual mas que técnico :)

Salud OS
  • 0

#18 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 23 junio 2010 - 07:06

Creo recordar que tu aplicación recibía los datos por el puerto serie procedentes de un tarifador telefónico ¿me equivoco?

Si es así porque no haces un servicio que este continuamente leyendo el puerto serie, y cada vez que reciba algún dato lo guarde en una base de datos. Asi inicie sesion o no el usuario los datos nunca se pierden, ademas para leer el puerto serie y guardar los datos en una base de datos no necesitas interactuar con el usuario para nada.

Luego desde la aplicación del usuario solamente tienes que leer los datos desde la base de datos (un simple select * from ...). Solamente recuerda que la base de datos debe admitir conexiones TCP (firebird, mysql, sql server, etc ...) de esta manera podrás acceder tanto desde el servicio como desde el programa de usuario sin problemas.

¿Que te parece esta opcion?
  • 0

#19 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 23 junio 2010 - 09:08

Creo recordar que tu aplicación recibía los datos por el puerto serie procedentes de un tarifador telefónico ¿me equivoco?

Si es así porque no haces un servicio que este continuamente leyendo el puerto serie, y cada vez que reciba algún dato lo guarde en una base de datos. Asi inicie sesion o no el usuario los datos nunca se pierden, ademas para leer el puerto serie y guardar los datos en una base de datos no necesitas interactuar con el usuario para nada.

Luego desde la aplicación del usuario solamente tienes que leer los datos desde la base de datos (un simple select * from ...). Solamente recuerda que la base de datos debe admitir conexiones TCP (firebird, mysql, sql server, etc ...) de esta manera podrás acceder tanto desde el servicio como desde el programa de usuario sin problemas.

¿Que te parece esta opcion?


Efectivamente amigo Soane, así lo he soñado :D y si me parece la opción ideal.

Salud OS
  • 0

#20 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 23 junio 2010 - 03:57

Hola,
No estoy muy puesto en lo que es Servicios y en los distintos niveles de acceso que estos tienen.

Domingo, disculpa si vengo con un argumento filosófico: Para que el servicio pueda tirar contra la base de datos, el motor debe estar activo. En el caso de Firebird, cuyo motor se ejecuta como servicio, y si bien por lo general este se ejecuta como (si no me falla la memoria) SYSTEM y arranca ni bien se inicia el SO (o al menos eso tengo entendido  ^o| ), ¿Debería tener el servicio de Eliseo el mismo "nivel"? ¿Y si el servicio de Eliseo se levanta primero que el motor?  ;)
Además, dependiendo de como esté configurado el motor no siempre arrancará automáticamente, y es necesario reiniciarlo manualmente.

No se como será con otros motores de base de datos (y si es que hay que considerar este escenario).

Una posible alternativa es que el servicio de Eliseo, espere al servicio del motor (si estamos hablando de Firebird... repito... no se como serán los otros) o bien, para no estar perdiendo datos... que guarde un archivo temporal con los datos obtenidos al momento y en cuanto esté disponible el motor mandarlos.

Ahora mi pregunta... ¿Es posible añadir componentes de acceso a base de datos cuando la aplicación es un servicio? No lo he probado, pero me asalta la duda.  ^o|

Saludos,
  • 0




IP.Board spam blocked by CleanTalk.