Pregunta: | 10778 - COMO EJECUTAR UN FICHERO *.EXE DESDE UN PROGRAMA PASCAL |
Autor: | ERNEST SURIA RUIZ |
Tengo necesidad de jecutar un fichero EXE situado en el DOS desde un programa escrito en pascal. Para entrar en el directorio especificado desde pascal no tengo problema, pero luego no consigo ejectar el fichero EXE. Gracias |
Respuesta: | Diego Romero |
Hablando siempre de Turbo Pascal 7.0 la ayuda del procedimiento estandar Exec() de la unidad DOS es muy clara. Pero por las dudas aqui repito el codigo de ejemplo.
{$M $4000,0,0 } { 16K stack, no heap } uses Dos; var ProgramName, CmdLine: string; begin Write('Program to Exec (full path): '); ReadLn(ProgramName); Write('Command line to pass to ', ProgramName, ': '); ReadLn(CmdLine); WriteLn('About to Exec...'); SwapVectors; Exec(ProgramName, CmdLine); SwapVectors; WriteLn('...back from Exec'); if DosError <> 0 then{ Error? } WriteLn('Dos error #', DosError) else WriteLn('Exec successful. ', 'Child process exit code = ', DosExitCode); end. |
Respuesta: | Dabiz Spuch Calvar |
Sólo tienes que usar la instrucción Exec. Es necesaria reducir el tamaño del Heap para que pueda ejecutar el programa. Además debes llamar swapvectors antes y después de Exec para que no se confundan los manejadores de interrupciones.
Ejemplo: {$M 50000,0,0} { Reserva 50000 bytes de la pila } USES Dos,Crt; PROCEDURE Inicio; VAR LineaParametros : string; DirString : string; Dir : integer; BEGIN FOR Dir := 1 TO 255 DO BEGIN Str (Dir,DirString); LineaParametros := '-a ' + ParamStr(1) + DirString; SwapVectors; Exec ('c:\windows\nbtstat.exe',LineaParametros); SwapVectors; END END; BEGIN Inicio END. |