PDA

Ver la Versión Completa : Ejecutar programa externo con Lazarus


abelaquino
09-05-2008, 16:31:53
Tengo un problema al intentar ejecutar un programa externo con un launcher creado con lazarus utilizando el código que sigue a continuación....

Este código funciona en windows perfectamente, mi problema es con Linux, al ejecutarlo desde una terminal ejecuta la aplicación lanzada por mi Launcher perfectamente, accediendo a la carpeta en forma grafica tambien ejecuta perfectamente, pero cuando creo un lanzador en el escritorio llamando al launcher no me ejecuta nada, el codigo que creo no esta funcionando es el proc GetCurrentDir mas abajo mostrado...

Necesito una forma de obtener el nombre del directorio de mi launcher...
como ya les dije mas arriba, el GetCurrentDir funciona solo si estas ubicado en el directorio del launcher..

Desde ya muchas gracias
.. Espero una ayudita...



// Esto es un programa de demostración que enseña como lanzar
// un programa externo.
program launcher;

// Aquí incluimos archivos que tienen funciones y procedimientos
// útiles que necesitaremos.
uses
Classes, SysUtils, Process;

// Definición de "AProcess" como una variable
// de tipo "TProcess"
var
AProcess: TProcess;
DirectorioName: string;
// Aquí comienza a ejecutarse nuestro programa
begin

// Ahora se creará el objeto TProcess, y
// lo asignamos a la variable AProcess.
AProcess := TProcess.Create(nil);

// Le decimos al nuevo AProcess la orden que debe ejecutar.
// Vamos a utilizar el compilador FreePascal

//Obtenemos el nombre del directorio actual
DirectorioName := GetCurrentDir;
AProcess.CommandLine := 'wine '+ DirectorioName + '/' + ApplicationName + '.lin';

// writeln('wine ' + DirectorioName ApplicationName + '.lin');
// Application.;


// Definiremos una opción para cuando se ejecute
// el programa. Esta opción hará que nuestro programa
// no continúe hasta que el programa que lancemos
// haya terminado de ejecutarse. vvvvvvvvvvvvvv

// AProcess.Options := AProcess.Options + [poWaitOnExit];


// Ahora que AProcess conoce cuál es la orden,
// lo ejecutamos.
AProcess.Execute;

// Esto ocurrirá cuando ppc386 termine de ejecutarse.
AProcess.Free;
end.

Ñuño Martínez
12-05-2008, 09:37:35
Si dices que el programa arranca correctamente desde un terminal entonces dudo que el problema sea del código fuente.

Asegúrate de que pones la orden completa, con toda la ruta desde la raíz, en el campo de ejecución del lanzador. En mi escritorio (Xfce) este campo se llama "Orden" pero en otros escritorios (Gnome, KDE, etc) puede que se llame diferente. También debes tener en cuenta si el programa necesita de un terminal (o consola de texto). En GNU/Linux esto no suele dar muchos problemas, aunque según cómo utilices dicho terminal (el famoso "stdout") puede que la aplicación se vuelva "invisible", es decir, que se ejecuta pero no se ve.