Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-03-2016
Willo Willo is offline
Miembro
 
Registrado: jun 2006
Posts: 116
Poder: 18
Willo Va por buen camino
Ejecutable desde servidor

Por alguna extraña razon que aun no comprendo, una aplicacion que tengo, funciona diferente si la ejecuto desde el servidor de una red a que si la ejecuto desde una maquina normal.

La aplicacion esta desarrollada en Delphi 7 y usa MyDAC para conectarse al servidor de base de datos (MySQL)...

En lo que averiguo que diantres esta pasando, pregunto:

hay alguna consideracion especial que debiera tomar en cuenta si quiero que mi aplicacion funcione ejecutandola desde el servidor, cambiandole solo el acceso directo a las maquinas?, debo configurar algo diferente en el servidor?

Mi temor es que al usar varias personas el mismo ejecutable, colapse por alguna razon.
Responder Con Cita
  #2  
Antiguo 18-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Y que hace diferente? Como la ejecutas?
Responder Con Cita
  #3  
Antiguo 18-03-2016
Willo Willo is offline
Miembro
 
Registrado: jun 2006
Posts: 116
Poder: 18
Willo Va por buen camino
Basicamente el problema esta en un proceso que el sistema hace al leer unos archivos de texto (que estan en una carpeta del servidor)...

he estado revisando permisos del usuario desde la maquina cliente, ejecutando la aplicacion como Administrador en la maquina cliente, etc...

hasta ahorita, el mismo proceso en el servidor, me lee la informacion correctamente, ejecutando el EXE que esta en el servidor desde la maquina cliente tambien hace el proceso correcto... el problema esta cuando ejecuto el mismo EXE desde la maquina cliente...
Responder Con Cita
  #4  
Antiguo 18-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Y cual es el error?
Responder Con Cita
  #5  
Antiguo 19-03-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por AgustinOrtu Ver Mensaje
Y que hace diferente? Como la ejecutas?
Cita:
Empezado por AgustinOrtu Ver Mensaje
Y cual es el error?
Y es que no somos adivinos, pon código fuente, que se nos averió la bola de cristal
Responder Con Cita
  #6  
Antiguo 21-03-2016
Willo Willo is offline
Miembro
 
Registrado: jun 2006
Posts: 116
Poder: 18
Willo Va por buen camino
Amigos, de antemano agradezco su interes y disposición para ofrecerme su ayuda y consejo... puedo poner el código fuente de la aplicación, pero el caso es que, el código funciona bien!, hace lo que se supone debe hacer de la manera que se supone lo haga... pero solo cuando lo ejecuto en el servidor y en algunas máquinas conectadas a la red.

Sospecho que el problema venga de un asunto de permisos o algo asi, sin embargo; ya agote mis opciones y paciencia.

Si ejecuto la aplicación en el servidor desde una de las maquinas problemáticas, funciona perfectamente; y es por eso que mi pregunta original es para saber que consideraciones debo tomar en cuenta si quiero que todos los usuarios ejecuten la aplicación EN el servidor.

Gracias a todos nuevamente
Responder Con Cita
  #7  
Antiguo 21-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Todavia no nos has explicado que es lo que debe hacer tu codigo y que es lo que hace desde una de las maquinas problematicas

No hace falta que publiques el codigo fuente entero, solo las partes involucradas en este problema

Decis arriba que lo que hace es leer unos archivos de texto. Ok, como los lees? Los abris con un TStringList? O usando file of y luego leyendo con Readln?

Cual es exactamente el problema, que es lo que hace mal? No puede abrir el archivo? Lo abre pero no lo recorre? Ves la mitad? Ves informacion de mas? De menos?

Es realmente imposible darte una respuesta

Consideraciones a tener en cuenta... de nuevo, imposible decirlo, ya que no sabemos que es lo que hace tu programa. Tenes que escribir en el archivo? Definitivamente hay que fijarse si esta en uso o no, y al abrir el archivo hay que hacerlo indicando que solo nosotros podemos operar con el. La mas tonta, el archivo existe? Como se selecciona ese archivo, lo indica el usuario (como lo indica, usa un OpenDialog) o estan en una carpeta fija. Esa carpeta fija es accesible? Como se indica la ruta? Es absoluta o relativa? Corresponde a una ruta local (C:\carpeta\archivo.txt) o a una ruta de red (\\SERVER\C:\carpeta\archivo.txt). Etc, etc, etc, la cantidad de "consideraciones" y "preguntas" son infinitas, a menos que nos des mas informacion
Responder Con Cita
  #8  
Antiguo 21-03-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ummm...


Última edición por Casimiro Notevi fecha: 21-03-2016 a las 20:28:55.
Responder Con Cita
  #9  
Antiguo 21-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Ummm...

Yo froto y froto pero no pasa nada...
Responder Con Cita
  #10  
Antiguo 21-03-2016
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 290
Poder: 21
elrayo76 Va por buen camino
Explica paso por paso lo que haces para ejecutar tu aplicación cuando anda bien y cuando no funciona. Debes decirnos que es lo que tiene que hacer tu aplicación y que no lo hace.

Pon el mensaje de error si es que tienes alguno.

Si el problema es que no se lee correctamente ese archivo de texto que dices que tienes el tema es que tanto la aplicación como el archivo deben tener los permisos adecuados.

A mi me paso algo con los permisos que te comento por si te sirve de algo. Tengo un servicio de impresión corriendo en Windows que cada 1 o 2 segundos levanta de una tabla los datos a imprimir en una impresoras de etiquetas. Además estos datos los usaba para reemplazar unas variables dentro del archivo de texto que tenia el formato con el código para la impresora.

El servicio funcionaba correctamente y no dejaba error alguno. El problema era que el archivo de texto no tenia los permisos corecto. Este archivo tenía que ser levantado con el mismo usuario que se corria el servicio. Para esto tuvo que cambiar los permisos y usuarios que tenia el archivo de texto.

Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #11  
Antiguo 21-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Es que las posibilidades son practicamente infinitas

Puede ser hasta un problema de Encoding

Pero que yo sepa, el brainstorming como metodologia de resolucion de problemas no es el mas adecuado
Responder Con Cita
  #12  
Antiguo 22-03-2016
Willo Willo is offline
Miembro
 
Registrado: jun 2006
Posts: 116
Poder: 18
Willo Va por buen camino
Ok chicos vale...
Código Delphi [-]
if Earchivo1.Filename <> '' then
begin
       CopyFile(PChar(Earchivo1.Filename), PChar(xrutap+(Extractfilename(Earchivo1.Filename))), False);
       if fileexists(xrutap+extractfilename(Earchivo1.Filename)) then
       begin
              Dm.Bitacora('Ordenes de trabajo','Agregado de archivo Exp Elect',Esolicitud.Text,xrutap+(Extractfilename(Earchivo1.Filename)));
              Deletefile(Earchivo1.Filename);
Básicamente ese es el código "problemático"... los archivos que se estan copiando de una ruta a otra estan en el servidor (Windows 2008 R2) y como les comentaba, en algunas máquinas de la red el código funciona sin problema, en otras falla sin devolver ningún error, si ejecuto el ejecutable en el servidor desde cualquier máquina, también funciona sin problema.

Aislando el problema todo se origina ahí, ya que la lectura de los archivos viene después, pero... como en ocasiones ni siquiera los copia a donde deben estar, el proceso de lectura deja un error de apertura en la bitácora.

Cabe mencionar que en todos los casos las pruebas las he realizado usando el administrador como usuario para realizar la conexion al servidor.

Gracias de antemano

Última edición por Casimiro Notevi fecha: 22-03-2016 a las 10:51:56.
Responder Con Cita
  #13  
Antiguo 22-03-2016
Reasen Reasen is offline
Miembro
NULL
 
Registrado: dic 2015
Ubicación: Barcelona
Posts: 140
Poder: 9
Reasen Va por buen camino
Veo que copias el archivo y luego compruebas si se a copiado, si es así entonces eliminas el archivo original...


MoveFileA


Mete esto en una variable, sera mas comodo de leer: "xrutap+(Extractfilename(Earchivo1.Filename)"
Responder Con Cita
  #14  
Antiguo 22-03-2016
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 290
Poder: 21
elrayo76 Va por buen camino
Como te comente antes, intenta ver los permisos de los archivos a ver si es por eso que no hace lo correcto. Por mas que uses un usuario administrador puede que no te funcione.

Si los archivos se suben al servidor con un usuario puede que otro por mas que sea administrador no lo vea o la aplicación no los pueda usar correctamente. Esto puede pasar con los nombre de máquinas, segun este armado el esquema de permisos en los sorvidores.

saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #15  
Antiguo 22-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Asegurate de leer la documentación

La funcion CopyFile devuelve True o False segun la operación tuvo éxito o no

Tu error es que tu codigo sigue operando sin chequear el valor de retorno. Las funciones de la API de Windows no suelen elevar excepciones; es por esto que la mayoria retorna el Boolean

Luego, existe el método RaiseLastOSError definido en la unidad SysUtils que eleva una excepción con el mensaje y código de la última excepción que se generó al llamar una llamada a la API de Windows

Podrías refactorizar tu código de la siguiente manera:

Código Delphi [-]
  if not CopyFile(...) then
    RaiseLastOSError;

  // código que se ejecuta si el archivo fue copiado con éxito

Otra forma de hacerlo en mi opinión mas limpia es usando la funcion Win32Check, también de la unidad SysUtils

Win32Check chequea el valor de retorno de la función en cuestión, y si es False (hubo un error) invoca a RaiseLastOSError

Código Delphi [-]
  if Win32Check(CopyFile(...)) then
  begin
    // código que se ejecuta si el archivo fue copiado con éxito
  end;
Responder Con Cita
  #16  
Antiguo 22-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Por otra parte, que hace el metodo Dm.Bitacora

Has probado depurar la aplicacion? Podrias ir imprimiendo mensajes en pantalla o en un archivo para ver "hasta donde llega"

Es mejor trabajar con información real y no andar jugando a las adivinanzas
Responder Con Cita
  #17  
Antiguo 22-03-2016
Willo Willo is offline
Miembro
 
Registrado: jun 2006
Posts: 116
Poder: 18
Willo Va por buen camino
No cabe duda que aqui siempre hay oportunidad para aprender de los grandes...

Gracias chicos, incorporare sus sugerencias a mi codigo y espero que eso arroje luz a mi ceguera.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como crear un ejecutable hijo desde mi ejecutable? K04VH4CK Internet 7 14-08-2015 08:02:23
Llamar ejecutable Delphi desde PHP con parametros Alejandro73 PHP 0 14-08-2013 18:41:57
password paradox desde ejecutable.. ingel Conexión con bases de datos 5 15-11-2010 12:39:48
llamar ejecutable desde boton web JuanErasmo .NET 2 16-01-2008 17:58:45
Llamar Forms desde un ejecutable????? subzero Varios 5 27-12-2005 21:02:52


La franja horaria es GMT +2. Ahora son las 06:48:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi