![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
TService , no arranca
Hola, buenas tardes.
He buscado en el foro y se habla mucho de este tema, pero no he sabido encontrar la respuesta de el porqué no arranca. Este sería el código, más o menos parecido a alguno que he visto en el foro:
¿Podéis ver el motivo? Muchas Gracias. |
|
#2
|
|||
|
|||
|
⚠️ PROBLEMA PRINCIPAL: Uso de TTimer en un servicio de Windows
Los servicios NO tienen una interfaz de usuario ni un loop de mensajes visual (como Application.ProcessMessages), por lo que TTimer no funciona como esperas. El TTimer depende del mensaje WM_TIMER, que no se procesa en un servicio como sí en una app VCL normal. ✅ SOLUCIÓN 1: Usa un hilo (TThread) en lugar de TTimer Así sí puedes ejecutar tareas cada X segundos sin bloquear el servicio. 🧠 Alternativa funcional:
Y en ServiceStart:
Y no olvides terminarlo en ServiceStop si lo mantienes como miembro de la clase. ⚠️ OTRO PROBLEMA: Beep No uses Beep en servicios. No está permitido en contexto de servicio (no hay usuario con escritorio para oírlo), y puede incluso tirar errores. Quita todas las llamadas a Beep. ⚠️ OTRO DETALLE: Acceso a ruta de usuario desde un servicio Estás escribiendo el log en:
⚠️ Los servicios se ejecutan como SYSTEM por defecto, no como el usuario que tú eres. Esto significa que esa ruta probablemente no exista o no tenga permisos para escribir. ✅ Solución: Cambia la ruta del log a una más accesible, como:
Y asegúrate de que exista la carpeta y tenga permisos. Última edición por navbuoy fecha: 10-07-2025 a las 22:22:32. |
|
#3
|
|||
|
|||
|
✅ CÓDIGO MODIFICADO: Unit1.pas
✅ PASOS EXTRAS Crea la carpeta C:\ServiceLogs manualmente, o dale permisos para que el servicio pueda crearla. Instala el servicio: Código:
MyService.exe /INSTALL Mira el archivo de log en C:\ServiceLogs\Service_Test.txt. |
|
#4
|
|||
|
|||
|
Buenos Días.
Muchas Gracias por tu detallada respuesta, me ha servido de mucho, sobre todo para conocer sobre este tema. Algo debo estar haciendo mal, porque sigue sin funcionar. No hace nada. El código está tal cual tu propuesta, te digo cómo lo hago: Cita:
Volverte a agradecer la ayuda. |
|
#5
|
|||
|
|||
|
Que no cree el archivo Service_Test.txt suele deberse a una de estas tres causas claras, especialmente en servicios:
🧨 1. El servicio no tiene permisos para escribir en C:\ServiceLogs\ Aunque tú puedes escribir ahí, el servicio corre por defecto como LocalSystem, que tiene permisos algo diferentes, especialmente en discos NTFS modernos. ✅ Solución: Dale permisos de escritura a Todos (Everyone) sobre la carpeta: Crea manualmente C:\ServiceLogs\. Clic derecho → Propiedades → Seguridad → Editar permisos. Añade Todos (Everyone) y dale control total o al menos “Modificar”. 🧨 2. El directorio no existe y ForceDirectories falla silenciosamente Aunque ForceDirectories(...) se supone que lo crea, en contexto de servicio puede fallar sin lanzar excepción (por seguridad del sistema). ✅ Solución: Crea manualmente la carpeta antes de arrancar el servicio: Código:
C:\ServiceLogs\ ✅ Debug temporal: escribe en archivo del sistema Como prueba temporal, cambia la ruta a algo más accesible: Si ahí sí te crea el archivo, entonces el problema es 100% de permisos en C:\ServiceLogs. ✅ Alternativa limpia: usar carpeta pública Si no quieres lidiar con permisos, escribe aquí:
Esto apunta a algo como:
Que suele tener permisos de escritura incluso para servicios. |
|
#6
|
|||
|
|||
|
Hola, buenas tardes.
Nada, sigue igual, pero hay unas particularidades. En Windows 11 Home, arranco el servicio, después voy al administrador de tareas y en servicios, NO aparece tampoco. En Windows 10 Home, arranco el servicio, después voy al administrador de tareas y en servicios, SI aparece, pero tampoco crea el archivo. Ahora me he dado cuenta que en todas las carpetas aparece el checkBox "Solo lectura (solo para archivos de la carpeta)" activado y no se puede desactivar, pero la cosa es que me deja acceder a la carpeta y crear archivos, no sé exactamente que sentido tiene. De momento voy a continuar desarrollando el hilo para verifactu y cuando de con la tecla de lo qué está pasando lo incorporo al servicio. Muchas Gracias por la ayuda, cualquier comentario, idea que quieras darme será bienvenida. Volver a agradecerte tu ayuda ![]() |
|
#7
|
|||
|
|||
|
El problema clave
Windows 10/11 Home Edition NO permite servicios creados por el usuario de forma convencional (como en Pro). En concreto: No soporta por completo la infraestructura de servicios personalizados, especialmente si no usas instaladores con privilegios elevados. Tu servicio probablemente no se está instalando correctamente, aunque creas que sí arranca. Si no aparece en services.msc o el Administrador de tareas → pestaña Servicios, entonces no está registrado como servicio del sistema. ¿Por qué aparece en Windows 10 Home pero no en 11? Windows 10 Home aún permite más tolerancia con servicios mal registrados. Pero: Aunque aparezca en la lista de servicios, no se ejecuta correctamente. No tiene permisos de acceso a disco (ni siquiera para escribir logs). TService se ejecuta en contexto restringido, sin permisos de escritorio, temporales, o acceso a rutas de usuario como C:\Users. Conclusión En Windows Home, los servicios hechos en casa no están del todo soportados. Aunque el código esté bien, no ejecutará correctamente sin configuración y permisos adecuados. Lo ideal es probar primero como app normal, y luego migrar a servicio en una edición Pro o usando un instalador con sc.exe. ✅ SOLUCIONES POSIBLES OPCIÓN 1 — Ejecutar como aplicación normal (no servicio) para pruebas 👉 Si esto funciona, tu problema es 100% que el servicio no se ejecuta correctamente en modo real. OPCIÓN 2 — Verifica e instala bien el servicio Abre una consola como Administrador. Navega a donde está tu .exe del servicio. Instálalo: Código:
MyService.exe /install Asegúrate de que: Aparece en la lista. Puedes hacer clic derecho → Iniciar. No da error al arrancar. OPCIÓN 3 — Cambia el usuario del servicio Por defecto, el servicio se ejecuta como LocalSystem, que no puede acceder a carpetas de usuario. Cámbialo: En services.msc, busca tu servicio. Clic derecho → Propiedades → pestaña Iniciar sesión. Marca "Esta cuenta" y pon tu cuenta de usuario de Windows. Introduce la contraseña. OPCIÓN 4 — Registra log en el Visor de Eventos (más fiable en servicios) Agrega esto a WriteLog para registrar en el visor de eventos: Es más confiable que escribir a disco bajo LocalSystem. Última edición por navbuoy fecha: 11-07-2025 a las 21:33:25. |
|
#8
|
|||
|
|||
|
Hola, Buenas noches.
Cita:
Muchas Gracias !!!!! |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| TService | sancarlos | API de Windows | 4 | 12-11-2008 10:14:25 |
| TService y TForm | Softweb | API de Windows | 5 | 20-10-2008 17:41:01 |
| TService, IB, FB | OSKR | C++ Builder | 0 | 27-04-2005 11:51:11 |
| Imprimir desde un TService | gynch | Varios | 2 | 02-04-2004 19:35:23 |
| Imprimir desde un TService | gynch | Impresión | 0 | 24-03-2004 14:12:16 |
|