Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Ejecutar .exe en servidor unix/windows (https://www.clubdelphi.com/foros/showthread.php?t=85059)

jhonalone 21-01-2014 12:03:59

Ejecutar .exe en servidor unix/windows
 
Hola amigos.
Estoy intentando ejecutar un programa .exe para encriptar y desencriptar claves en el servidor. Lo tengo hecho en Delphi. Está confeccionado para correr en cmd, sin ventanas. Admite tres parámetros, con los que encripta y desencripta strings. Despues las graba en un fichero que debería leer desde PHP.

He estado buscando por los foros y lo más que he encontrado es que hay que hacerlo usando exec(), system() y alguna otra función similar.

Estoy probando con todas estas funciones y no he conseguido que se ejecute el .exe.

Dejo el programita de prueba.

Código PHP:

<?php
echo '<pre>';
$ultima_linea system('EnDeStr.exe 4a5156e1b569ff3d ClaveDeLaBaseDeDatos ClaveDeLasVisitas'$retval);
// Imprimir informacion adicional
echo '
</pre>
<hr />Ultima linea de la salida: ' 
$ultima_linea '
<hr />Valor de retorno: ' 
$retval;
?

El valor de retorno siempre es 1
Y el ejecutable no se ejecuta.

¿Alguien podría echarme una manita?
O a lo mejor es que no se puede hacer...

Gracias de antemano.

Ñuño Martínez 21-01-2014 16:29:25

Si el servidor es UNIX, sólo podrás ejecutarlo si está funcionando sobre una plataforma Intel (Nada de ARM, Motorola, PowerPC...), y siempre y cuando tengas instalado el entorno de ejecución WineHQ, ya que UNIX no tiene las mismas bibliotecas que Windows.

Neftali [Germán.Estévez] 21-01-2014 20:01:15

Cita:

Empezado por jhonalone (Mensaje 471961)
Ejecutar .exe en servidor unix/windows

No podrás ejecutar un EXE generado en un servidor UNIX, como ya te han dicho.
Tendrás que traducir el ejecutable a otro lenguaje (PHP), o recompilarlo en Lazarus por ejemplo (que es multiplataforma) para poder ejecutarlo en UNIX.

Julián 22-01-2014 13:14:47

Prueba con exec() -> http://no2.php.net/manual/en/function.exec.php

jhonalone 22-01-2014 18:20:36

Gracias a todos por vuestro interés.

Bueno, creo que el servidor es Linux, pero creo que es muy similar a Unix.

¿Si el servidor fuera Windows, sería más fácil?

Neftali, nunca he trabajado con Lazarus, aunque he oido hablar mucho de él en los foros de Delphi, agradecería una breve ilustración sobre este entorno de programación, sus posibilidades y cómo conseguirlo.

No sé en qué plataforma trabaja mi servidor, ni cómo saberlo Ñuño (Me gusta tu pseudónimo porque es muy espaÑÑÑÑol).

Y por último, Julián, he probado con exec() y tampoco me ejecuta el .exe. A lo mejor no estoy haciéndolo bien o el servidor está en "Save mode", (que he leído por ahí) y por éso no me ha funcionado, ilumíname si puedes con un ejemplo.

GRACIAS de nuevo a todos por vuestro interés.
Sigo estudiando y buscando...

Neftali [Germán.Estévez] 22-01-2014 18:40:28

Cita:

Empezado por jhonalone (Mensaje 472000)
Bueno, creo que el servidor es Linux, pero creo que es muy similar a Unix.

Correcto, básicamente son lo mismo (al menos para lo que a tí te interesa).
Nopuedes lanzar un EXE generado en Delphi (Windows) en un servidor de este tipo. A no ser que sea sobre una máquina virtual, pero eso en realidad es montar un Windows dentro del Linux para lanzar el ejecutable.

Cita:

Empezado por jhonalone (Mensaje 472000)
¿Si el servidor fuera Windows, sería más fácil?
No es que sería más fácil, es que sería posible.
En un servidor Windows podrías lanzar (a priori sin problemas) una aplicación hecha en Delphi.


Cita:

Empezado por jhonalone (Mensaje 472000)
Neftali, nunca he trabajado con Lazarus, aunque he oido hablar mucho de él en los foros de Delphi, agradecería una breve ilustración sobre este entorno de programación, sus posibilidades y cómo conseguirlo.

Es en cierta manera "similar" a Delphi. La ventaja es que es multiplatafarma. Quiere decir que podrías usar un Linux, para instalar Lazarus y el programa que compilaras, entonces sí se podría ejecutar en un Linux.
Si tu aplicación está echa en Delphi, dependiendo que cómo sea, podría compilar (sin apenas sin cambios) en Lazarus.

Un saludo.

Ñuño Martínez 22-01-2014 19:21:09

Cita:

Empezado por jhonalone (Mensaje 472000)
No sé en qué plataforma trabaja mi servidor, ni cómo saberlo Ñuño.

Pues es esencial que sepas la plataforma exacta (al menos, qué microprocesador y qué sistema operativo usa). Pregunta al administrador del sistema, si es necesario, pero antes de hacer nada más deberías saberlo.

Y me alegra que te guste el nick. Precisamente me lo puse por la Ñ. ;)

jhonalone 22-01-2014 19:57:55

Gracias de nuevo por vuestra ayuda, (Neftali, Ñuño) (Por orden de respuesta, que de importancia para mí es la misma)

Seguiré investigando y si lo consigo, ya os cuento.

Un saludo.

jhonalone 25-01-2014 22:10:28

Hola, de nuevo.
Os cuento.
He instalado Lazarus.
He convertido las unidades que usaba con Delphi.
Me ha costado entender el tema de los paquetes, pero he conseguido complilar el programa con Lazarus.
El programa comienza según código que sigue:
Código Delphi [-]
program Desencriptar;
{$mode objfpc}{$H+}
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}

y el script en php es así:
Código PHP:

<?php
echo '<pre>';
exec'(Desencriptar.exe 4a5156e1b569ff3d ClaveDeLaBaseDeDatos ClaveDeLasVisitas'$stre$retval);
// Imprimir informacion adicional
echo '
</pre>
<hr />Valor de retorno: ' 
$retval;
?>

Y me sigue devolviendo el código de retorno = 1

Bueno, el Lazarus lo he instalado y ejecutado en Windows que es la plataforma que utilizo. No sé si tendré que hacer algo en el IDE de Lazarus para que genere código compatible con Linux/Unix.
Si alguien puede ayudarme, gracias.
Un saludo.

jhonalone 25-01-2014 22:17:26

Ah! se me olvidó aclarar un par de cosas. El ejecutable generado con Lazarus, es casi 3 veces mayor que el generado por Delphi. Y otra cosa el ejecutable generado por Lazarus, funciona PERFECTAMENTE en Windows.
Saludos.

Neftali [Germán.Estévez] 27-01-2014 08:33:18

Pues si el programa te funciona, ya está casi todo.
Ahora instalas el Lazarus en Linux/Unix, compilas el programa y debería funcionar.

Que es lo que ya habíamos comentado aquí:

Cita:

Empezado por Neftali (Mensaje 472002)
Quiere decir que podrías usar un Linux, para instalar Lazarus y el programa que compilaras, entonces sí se podría ejecutar en un Linux.

Un saludo.

jhonalone 27-01-2014 20:40:17

Gracias, Neftalí.
Es que ahora tengo otros dos problemas.
1- Nunca he utilizado Linux y no lo tengo instalado, (ni tengo idea) en mi PC.
2- Tambien tendría que instalar el Lazarus en un sistema que desconozco.

Digo yo, si el Lazarus el multiplataforma, y tiene una opción de generar un ejecutable Linux (Al menos éso he entendido en la pestaña "Proyecto/Opciones de Proyecto/Opciones del Compilador/Generación de Código/Plataforma Objetivo/Sistema Operativo Deseado/Linux") Cuando intento compilar con esta "plataforma objetivo" me lanza un error y me genera una Unit llamada fcllaz. el error es el siguiente: "fcllaz.pas(0,0) Fatal: Can not find unit system used by fcllaz."
Consecuentemente, no termina la compilación.
Estoy empezando con Lazarus, pero creo que lo que intento es lícito.
Sigo investigando y buscando.
He encontrado otro compilador de free pascal llamado CodeTyphon, lo he instalado siguiendo las instrucciones obtenidas en la página de descarga que es pilotlogic.com y después de esperar casi media hora de insstalación en cmd ha terminado y no me ha creado el icono en el escritorio, y no sé cómo puedo ejecutarlo.
Aaaaah! Me crecen los enanos.....

Gracias por vuestra ayuda, sigo peleando....

Un saludo.

Casimiro Notevi 27-01-2014 21:17:56

Cita:

Empezado por jhonalone (Mensaje 472115)
He encontrado otro compilador de free pascal llamado CodeTyphon

Codetyphon es lazarus, al que han añadido muchos componentes y han hecho algunos cambios.

jhonalone 27-01-2014 21:48:49

Bueno, bueno, bueno....
Casi haciendo juegos malabares, he encontrado la forma de entrar en el Ide de CodeTyphon, he tenido que añadir un paquete en el que tengo 4 unidades que uso en mi proyecto, he intentado compilar el programa con la salida en Linux y he obtenido el mismo mensaje de error: "fcllaz.pas(0,0) Fatal: Can not find unit system used by fcllaz."

El IDE ES MUY SEMEJANTE al de Lazarus y creo que que los dos van paralelos ("para lelos") por que generan los mismos problemas, y son casi exactamente iguales.

Estoy empezando a "bajar las manos" nada es lo que parece y lo que yo busco, creo que sólo puedo conseguirlo como dice Neftalí (Creo que lleva acento en la í) O sea, instalando un sistema Linux y despues el Lazarus para Linux. Yo no llego a tanto, pero creo que si llamamos multiplataforma a un programa es porque puede correr en varias plataformas, no porque tenga una versión para cada plataforma. Poco mérito tiene que un programa ejecutado en Linux, produzca ejecutables en Linux. ¡¡¡Faltaría más que no pudiera hcerlo!!!
Lo verdaderamente interesante, sería que corriendo en un sistema, pudiera generar ejecutables, que pudieran ejecutarse en otros sistemas a elegir.

Bueno, esto son elucubraciones mías, quizás por la "pataleta" de que esperaba de un compilador algo que no me ha proporcionado.

Tanto Lazarus, como CodeTyphon prometen ser compatibles con otras plataformas y no lo cumplen. Vamos, si para hacer un ejecutable en Linux
tengo que generarlo desde Linux, esto quiere decir que lo que ambos prometen de que se pueden generar ejecutables en Android, por poner un ejemplo, tengo que instalar un sistema operataivo Android y generarlos desde el mismo.

Con todo el mérito de ambos compliladores, esto es poco operativo.

Estoy empezando a ser pesado, pero es que estoy muy defraudado.

Saludos para todos los que tenéis la paciencia de leerme.

Casimiro Notevi 27-01-2014 22:04:59

Cita:

Empezado por jhonalone (Mensaje 472119)
Estoy empezando a ser pesado, pero es que estoy muy defraudado.

¿Defraudado por algo que no conoces y que casi estás todavía instalando? :eek:

Como he comentado antes, codetyphon es lazarus, por eso son tan parecidos, porque es lo mismo.
Creo que no deberías rendirte tan fácilmente, tendrías que informarte, mirar la web de lazarus, la documentación, preguntar en sus foros, etc.

Casimiro Notevi 27-01-2014 22:15:28

Cita:

Cross-platform Lazarus form designer uses LCL (Lazarus Component Library) which is especially designed for cross platform usage. Building your project for different platforms will give you native look and feel on each platform. There are no changes to the project needed.
Por cierto, para android, al ser java, funciona en distintos sistemas, pero no es gracias al "compilador" que uses, sino al lenguaje en sí.

Neftali [Germán.Estévez] 28-01-2014 08:45:44

Cita:

Empezado por jhonalone (Mensaje 472119)
Yo no llego a tanto, pero creo que si llamamos multiplataforma a un programa es porque puede correr en varias plataformas, no porque tenga una versión para cada plataforma. Poco mérito tiene que un programa ejecutado en Linux, produzca ejecutables en Linux. ¡¡¡Faltaría más que no pudiera hcerlo!!!
Lo verdaderamente interesante, sería que corriendo en un sistema, pudiera generar ejecutables, que pudieran ejecutarse en otros sistemas a elegir.

Según la WIKI:

Software multiplataforma puede dividirse en dos tipos; requiere una compilación individual para cada plataforma que le da soporte, y el otro se puede ejecutar directamente en cualquier plataforma sin preparación especial,...

En el caso de los ejecutables yo me conformo con lo segundo... ;-)
Entiendo que el mismo programa puedes compilarlo sin cambios en ambos sistemas y te va a funcionar.

Windows y Unix son sistemas operativos diferentes y no tiene lógica que un ejecutable (EXE) o una DLL que corre directamente sobre el sistema funcione en ambos sin cambios. Lo que tú comentas de multiplataforma (que sería lo ideal) me da la impresión de que sólo funciona con programas que "corren" sobre máquinas virtuales, por lo tanto en ese caso, los programas en sí no son multiplataforma, lo que son multiplataforma son las máquinas virtuales donde corren; Por ejemplo Java.

¿Has probado a instalar una máquina virtual en Windows (VirtualBox) con un Ubuntu, por ejempo? Luego instalas Lazarus y compilas.

jhonalone 28-01-2014 13:20:12

Gracias de nuevo a todos.
Dos cosas son ciertas, que tengo poca experiencia con Lazarus/CodeTyphon y otra que tal vez necesitaba haberme informado más de sus resultados reales, pues yo entendí lo de multiplataforma, como "generación de código en una plataforma, para ser usado en otra" y veo que no es el caso.

Estoy seguro que funcionaría, Neftalí
Cita:
¿Has probado a instalar una máquina virtual en Windows (VirtualBox) con un Ubuntu, por ejempo? Luego instalas Lazarus y compilas.

Pero mis conocimientos no llegan a tanto.
Desinstalaré los dos, puesto que en Windows ya me apaño con Delphi, y renunciaré a ejecutar el programa en el servidor.

Gracias a todos por aportarame tantas soluciones, pero yo soy sólo un aficionado y no me compensa el esfuerzo que tengo que hacer para lograr el resultado digamos que el balance coste/beneficio no me compensa.

Saludos.


La franja horaria es GMT +2. Ahora son las 23:28:27.

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