![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Fallo en tarea programada. Lanzar programa con interfaz gráfica
Hola amigos,
llevo un rato buscando y no encuentro nada para solucionar un pequeño-gran problema. Resulta que tengo un programa hecho delphi, que extrae una serie de datos, abre una plantilla en excel, tira los datos al excel y salva el resultado en un fichero. Este programa lo he movido a un servidor y funciona perfecto cuando lo ejecuto "a mano" desde una sesión abierta. Ahora quiero planificar su ejecución a una hora de la noche en la que no estoy , y he aquí donde me encuentro el problema. No funciona, ya que al día siguiente voy a buscar el fichero excel generado y no está. El programa no tiene log de actividad para ver sonde podría pararse ( esa es otra historia ). Supongo que el problema es que al ejecutarse la tarea programada, a pesar de haberla configurado para que se ejecute con mi usuario, no puede arrancar el interface gráfico ya que no hay sesión de usuario abierta ni escritorio donde arrancar el programa y el excel. Alguien ha tenido el mismo problema y lo ha solucionado ? Cómo? Gracias por vuestra ayuda. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#2
|
||||
|
||||
Asumo que no tendrás el código fuente del programa para adaptarlo, lo cual hace irrelevante que esté hecho en Delphi... o en C....
Dices que cuando llegas al otro dia no ves el archivo, pero ¿has hecho la prueba en vivo?, quiero decir: has visto la tarea hacer lo que dice que va a hacer? (con tu sesion abierta), es solo por descartar... Ya el otro tema es el de la sesion... Solo veo como opción que dejes una sesion de usuario abierta en la noche para que se ejecute.... ahora, si tienes el codigo fuente tendrías que extractar la funcionalidad y programarla como un servicio de windows.... bueno, no se me ocurre mas.. |
#3
|
||||
|
||||
Cita:
La solucion es poner todo el proceso en un servicio de windows.
__________________
El malabarista. |
#4
|
||||
|
||||
fjcg02,
Cita:
![]() Revisa esta información: Cita:
![]() Nelson. Última edición por nlsgarcia fecha: 26-09-2014 a las 04:05:55. |
#5
|
||||
|
||||
Gracias por vuestros consejos.
He llegado un poco más lejos. Por dar más pistas. - El programa se conecta a varias fuentes de datos, extrae los mismos, abre el excel con un fichero que hace de plantilla y vuelco los datos en varias pestañas. Tiene varios "informes" que se pueden seleccionar, pero también permite lanzarlo desde la línea de comandos con el nombre del informe como parámetro. - El programa funciona perfectamente cuando tengo la sesión abierta y lo lanzo. - Para comunicar el programa con excel utilizo los servidores de delphi ( versión 7). Creo que es comunicación COM como se llama. Cuando lo lanzo desde una tarea programada, no funciona. Lo lanzo desde un .bat, donde trazo los pasos que doy. A pesar de que el programa no deja log ( no era su cometido inicialmente ) intuyo que el programa no puede conectarse con excel aunque lo arranca ( lo veo en la lista de procesos tras lanzarlo ). Al no poder conectarse, supongo que aparece un mensaje de error y queda esperando para siempre que el usuario invisible pulse el botón de "Aceptar" ese mensaje. El ejecutable está en la lista de procesos en ejecución. Me queda cambiar toda la aplicación para que no arranque la interfaz gráfica, pero no tengo tiempo, y además llevamos esperando 5 meses que un gurú de java monte un aplicación nueva que sustituya a ésta ( que lo vea yo, todavía no lo creo) que hasta ahora funciona perfectamente aunque con alguna carencia . Por ese motivo tampoco me merece la pena modificarlo, estoy en una encrucijada. Gracias de nuevo por vuestra ayuda. Seguiré investigando. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#6
|
||||
|
||||
Recorde que MS no soporta el uso de automatizacion de office de modo servidor (osea, desatendido).
Aqui algunas ideas para darle vuelta: http://bharathkumaran.wordpress.com/...ndows-service/ Sin embargo, es mejor y mas eficiente generar los archivos sin pasar por excel. Por ejemplo usando http://www.tmssoftware.com/site/flexcel.asp
__________________
El malabarista. |
#7
|
||||
|
||||
Una tarea programada corre como SYSTEM, un servicio también. El problema de correr como SYSTEM es que el interface gráfico está en otro escritorio que no corresponde con ningún usuario y no es accesible. En algún caso si lo es, como cuando desbloqueamos una sesión o al identificarnos al inicio de ésta. Posiblemente el programa tenga algún otro problema al ser system, además de éste. Para resolver el problema descrito, desarrollé un sistema que permite lanzar una aplicación GUI desde un servicio a nombre del usuario que tenga abierta la sesión activa (que se ejecuta como SYSTEM), no se si puede solucionar tu problema pero puedes intentarlo. Aquí tienes el enlace: Lanzar una aplicación GUI desde un servicio.
Saludos. |
#8
|
||||
|
||||
Cita:
Sin embargo, en equipos con w7 no aparece en la lista de servicios dcom la aplicación excel. Seguiré investigando a ver como se recogen los servicios dcom en w2008 y office 2010. Gracias por vuestras observaciones. Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#9
|
||||
|
||||
fjcg02,
Cita:
![]() Cita:
Espero sea útil ![]() Nelson. |
#10
|
||||
|
||||
Bueno,
Después de probar todas las soluciones posibles, sigue sin funcionar. Sólo me queda cambiar la aplicación para que no utilice excel o lo haga de otra manera. He encontrado una librería gratuita que lo hace, pero con delphi no es capaz de abrir un fichero para utilizarlo de plantilla. Sin embargo con lazarus sí ¿?. A ver qué consigo... Gracias a todos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#11
|
||||
|
||||
Cita:
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#12
|
||||
|
||||
Según el código sí se puede con lazarus, pero con delphi no. Lo que no he hecho todavía es probarlo...
Hay una función readfile o algo así pero está entre directivas de compilación {if FpC} o algo así. No tengo el código a mano, mañana os confirmo el nombre de la librería... Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#13
|
||||
|
||||
fjcg02,
Cita:
![]() Pregunto: 1- ¿Como se llama la Librería Free que mencionas?, ¿Cual es el link de la misma?. 2- ¿Probastes usar Automatización de Excel (Msg #4 Opción 2) en lugar de los componentes ExcelApplication, ExcelWorkbook y ExcelWorksheet ?. 3- ¿Tienes instalado Excel en el Servidor?, ¿Con que versión de Excel interactúa tu aplicación?, ¿En que versión de Windows Server se ejecuta tu aplicación?. Espero sea útil ![]() Nelson. |
#14
|
||||
|
||||
Hola a todos,
intentaré ir por partes. Mi código se conecta a excel vía servidores. He dejado en el código lo más relevante, tal como está o funciona pero es para que os hagais una idea.
1- ¿Como se llama la Librería Free que mencionas?, ¿Cual es el link de la misma?. La liberia que he nombrado es ésta http://avemey.com/ ZEXMLSS for Lazarus, Delphi and C++Builder - Works with OpenDocument Format (ods)/Excel XML Spreadsheet/Office Open XML (xlsx) file format without installed Excel/OO Calc.. ZEXMLSSLIB 0.0.6 (beta) Lazarus, Delphi 7, C++Builder 6. Borland Developer Studio 2005, BDS 2006, CodeGear Delphi 2007, CodeGear RAD Studio 2009, 2010, Delphi XE è Delphi XE2. Permite crear ficheros en varios formatos. La librería no permite abrir ficheros en Delphi, sí en Lazarus: fichero xexlsx.pas de la libreria
2- ¿Probastes usar Automatización de Excel (Msg #4 Opción 2) en lugar de los componentes ExcelApplication, ExcelWorkbook y ExcelWorksheet ?. No he probado la automatización Excel como indicas en el msg#4. Lo probaré. De hecho , me he dado cuenta ahora de que proponías otra solución. 3- ¿Tienes instalado Excel en el Servidor?, ¿Con que versión de Excel interactúa tu aplicación?, ¿En que versión de Windows Server se ejecuta tu aplicación?. El programa se ejecuta en un equipo con W2008 server R2 y Excel 2007. Se ejecuta bien con la sesión abierta, se queda congelado con la aplicación lanzada desde una tarea programada. He revisado la configuración DCOM completa, dando permisos a todos los usuarios tal como indican en mensajes anteriores. El programa también funciona en equipos con WXP, W7 y cualquier versión de Office , 2000, 2007 ó 2010, incluso con varias versiones instaladas. Gracias a todos por vuestra ayuda. Seguiremos informando...
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#15
|
||||
|
||||
Cita:
Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#16
|
||||
|
||||
fjcg02,
Cita:
![]() Pregunto: 1- ¿Probastes la opción 1 del Msg #4?, allí se indica como iniciar un proceso como Administrador y como un Usuario Particular. 2- ¿Has probado hacer un programa de pruebas con acceso a una BD y ejecutarlo con la sesión abierta y cerrada?, la idea es simular las condiciones del programa en cuestión pero eliminando la variable de Excel y ver si el comportamiento es similar al descrito. Espero sea útil ![]() Nelson. |
#17
|
||||
|
||||
Lo primero muchas gracias por tu ayuda Nelson.
Del último mensaje que incluyes, tengo una duda. ¿ es lo mismo ejecutarlo como administrador tal y como propones con el código que aportas de RunAs y ejecutar la tarea programada con un usuario con privilegios de administrador del equipo ? El usuario con el que ejecuto la tarea programada es administrador de la máquina. Respecto a las pruebas, estoy seguro de que si ejecuto el programa sin invocar a excel, funciona.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#18
|
||||
|
||||
fjcg02,
Cita:
![]() Te comento: 1- En algunas ocasiones realizando trabajos técnicos en Windows, aun teniendo un usuario con privilegios de administrador, he tenido que usar el usuario administrator de Windows que se creo durante la instalación del SO. 2- Te sugiero hacer las pruebas comentadas y ver cual es el comportamiento de la aplicación en cuestión. 3- Te sugiero hacer una prueba con un programa muy básico sin GUI que haga uso de Automatización en Excel y ver cual es el comportamiento de la aplicación en cuestión. Espero sea útil ![]() Nelson. |
#19
|
||||
|
||||
Buenas de nuevo.
He realizado varias pruebas. Estos programas los he lanzado desde el task scheduler, es decir desde tareas programadas configurando la sesión con un usuario administrador del equipo donde se ejecuta. Los resultados han sido los siguientes, a saber: 1.- Programa simple con GUI con un timer que se cierra a los 20 segundos-> Resultado OK. 2.- Programa simple con GUI con una consulta a la bbdd que se cierra tras realizar la consulta-> Resultado OK 3.- Programa de producción con toda la artillería con llamada a excel usando TExcelApplication de la paleta servers de delphi-> Nunca acaba. 4.- Programa de producción con toda la artillería con llamada a excel sin usar TExcelApplication de la paleta servers de delphi y utilizando automatismos como Nelson plantea -> Nunca acaba. Me falta hacer la última prueba, que es modificar la aplicación para que no tenga GUI, pero no tengo suficiente tiempo para hacerlo. Intentaré hacerlo ( qué remedio ) pero no sé cuando, ya que me supone tirar el actual programa a la basura y hacer uno nuevo. Si tengo algún avance, os informo. Gracias a todos por aguantar la paliza... ![]()
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
#20
|
||||
|
||||
fjcg02,
Cita:
Cita:
![]() Te sugiero que antes de modificar todo el programa para ver si funciona sin GUI, hagas un ejemplo básico sin GUI que use Excel por medio de los componentes ExcelApplication, ExcelWorkbook, ExcelWorksheet y con Automatización en Excel y ver cual es el comportamiento de la aplicación, para ello sería conveniente incluir un log dentro del programa de pruebas para verificar en que punto falla la aplicación con ambos métodos. Voy a hacer unas pruebas en un Servidor con Windows 2003 Standard y en lo que tenga los resultados te comento. Nota: Si te es posible publica un ejemplo del uso de los componentes ExcelApplication, ExcelWorkbook y ExcelWorksheet. Saludos, Nelson. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problemas de Interfaz Grafica al Cambiar nombre de Programa | martini002 | Varios | 2 | 30-08-2012 16:46:22 |
Crear una Tarea Programada. | DasGrun | Windows | 1 | 04-08-2010 11:44:38 |
Tarea programada en Linux con Firebird 2.5 | Axel_Tech | Firebird e Interbase | 6 | 16-04-2010 18:52:16 |
Tarea programada en delphi | drykea | Varios | 6 | 18-02-2008 16:59:19 |
hacer una tarea programada | Patricio | Varios | 6 | 18-09-2007 20:39:21 |
![]() |
|