Introducción
Hay varias formas de ejecutar programas externos, pero nos centraremos en una, TProcess.
Si en Delphi utilizabas siempre ShellExecute y/o WinExec, puedes empezar a usar TProcess como alternativa en FPC/Lazarus (es válido también si estás ejecutando Lazarus en Linux, porque TProcess es multiplataforma).
Nota: FPC/Lazarus puede utilizar ShellExecute y/o WinExec, pero sólo en Win32. Si tu programa está enfocado a varias plataformas, utiliza TProcess, ¡es mejor!.
TProcess
Puedes utilizar TProcess para ejecutar programas externos. Algunas de sus ventajas son:
Independiente de la plataforma
Capaz de leer desde la entrada estándar (stdout) y de escribir en la salida estándar (stdin).
Nota: TProcess no es un terminal de shell! No puedes ejecutar directamente secuencias de comandos o reorientar la salida usando operadores como "|", ">", "<", "&", etc. Es posible obtener los mismos resultados con TProcess utilizando Pascal, mira algunos ejemplos más abajo..
Importante: Debes especificar la ruta completa al ejecutable. Por ejemplo "/bin/cp " en lugar de "cp". Si el programa está en la ruta estándar, puedes utilizar la función FindDefaultExecutablePath de la unidad FileUtil de la LCL.
// Este es un programa de demostración que enseña como lanzar // un programa externo. program lanzarprograma; uses Classes, SysUtils, Process; // Definición de "UnProceso" como una variable // de tipo "TProcess" var UnProceso: TProcess; begin // Ahora creamos UnProceso. UnProceso := TProcess.Create(nil); // Asignamos a UnProceso la orden que debe ejecutar. // Vamos a lanzar el compilador de FreePascal UnProceso.CommandLine := 'ppc386 -h'; // Definimos una opción de comportamiento de 'TProccess' // La opción poWaitOnExit hará que nuestro programa // se detenga hasta que termine el programa lanzado UnProceso.Options := UnProceso.Options + [poWaitOnExit]; // Lanzamos la ejecución de 'ppc386 -h'. UnProceso.Execute; // Nuestro programa se detiene hasta que 'ppc386' finaliza. UnProceso.Free; end.
Mas ejemplos y detalles aqui...