Añadir un ejecutable dentro de otro
Artículo por Club Developers · 01 marzo 2006
5520 vistas
A veces, por razones de simplificación de instalación, puede ser interesante añadir un segundo ejecutable dentre de su propio programa. Su estracción la realiza el propio programa, simulando, pues, el principio de un archivo auto-extraible seguido de la ejecución de código.
La idea es crear un fichero de recursos que contenga los datos del fichero a incluir después de declarar, dentro del código del programa principal, una directiva de compilación de tipo {$R nombre.res}. Esto informará al compilador que debe añadir el fichero de recursos nombre.res al ejecutable creado en la compilación.
Esta operación es similar al principio de concatenación de ficheros via comandos:
La dificultad radicará en saber donde termina Fichero1.exe y dónde empieza Fichero2.exe. A fin de resolver este problema, Delphi nos ayudará.
Veamos las etapas a seguir para crear el fichero de recursos, la inclusión y extracción del ejecutable:
1- En la carpera que contenga el fichero a incluir, creamos un nuevo documento de texto con un editor ASCII.
2- En él vamos a escribir lo siguiente:
Ejemplo: para el bloc de notas, llamado notepad.exe, escribirÃamos:
3- Guardar el fichero con un nombre de formato Nombre.rc. El nombre tendra que ser el indicado en la directiva de compilación añadida en el código fuente. Sólo cambiará la extensión, ya que el fichero Nombre.res se generará a partir de éste.
4- Desde una ventana de cónsola, nos posicionamos en la carpeta que contiene el fichero de texto y ejecutamos el comando:
El programa brcc32.exe es el compilador de recursos proporcionado con Delphi. Una vez creado el fichero de recursos, lo movemos, si es necesario, a la misma carpeta que contenga los fuentes de nuestro programa principal.
5- Ahora, en la unidad principal de nuestro programa, añadimos la directica de compilación "{$ Nombre.res}". De esta manera, después de cada compilación, se añadirá el recurso (aquà un fichero .exe) a nuestro programa principal.
6- A partir de ahora, para poder usar este recurso, tendremos que crear dos strams: un TFileStream y un TResourceStream.
Crear el TResourceStream pasándole por parámetro las informaciones necesarias para la obertura del recurso incluido:
ahora creamos el TFileStream en modo creación de fichero (opción fmCreate) dándole el nombre de fichero que queramos y ejecutamos la instrucción:
Esta operación extrae un fichero incluido como recurso en la carpeta deseada.
Para más información de uso de recursos con nuestra aplicación, aconsejamos la lectura de este artÃculo de DelphiCool (web en francés).
También decir que existe un componente shareware, TRCData, que permite esta operación en diseño (web en francés)
La idea es crear un fichero de recursos que contenga los datos del fichero a incluir después de declarar, dentro del código del programa principal, una directiva de compilación de tipo {$R nombre.res}. Esto informará al compilador que debe añadir el fichero de recursos nombre.res al ejecutable creado en la compilación.
Esta operación es similar al principio de concatenación de ficheros via comandos:
delphi
Copy /B Fichero1.exe+Fichero2.exe
La dificultad radicará en saber donde termina Fichero1.exe y dónde empieza Fichero2.exe. A fin de resolver este problema, Delphi nos ayudará.
Veamos las etapas a seguir para crear el fichero de recursos, la inclusión y extracción del ejecutable:
1- En la carpera que contenga el fichero a incluir, creamos un nuevo documento de texto con un editor ASCII.
2- En él vamos a escribir lo siguiente:
delphi
NombreDelRecurso RCDATA NombreDelEjecutable
Ejemplo: para el bloc de notas, llamado notepad.exe, escribirÃamos:
delphi
BlocDeNotas RCDATA "notepad.exe"
3- Guardar el fichero con un nombre de formato Nombre.rc. El nombre tendra que ser el indicado en la directiva de compilación añadida en el código fuente. Sólo cambiará la extensión, ya que el fichero Nombre.res se generará a partir de éste.
4- Desde una ventana de cónsola, nos posicionamos en la carpeta que contiene el fichero de texto y ejecutamos el comando:
delphi
brcc32 Nombre.rc
El programa brcc32.exe es el compilador de recursos proporcionado con Delphi. Una vez creado el fichero de recursos, lo movemos, si es necesario, a la misma carpeta que contenga los fuentes de nuestro programa principal.
5- Ahora, en la unidad principal de nuestro programa, añadimos la directica de compilación "{$ Nombre.res}". De esta manera, después de cada compilación, se añadirá el recurso (aquà un fichero .exe) a nuestro programa principal.
6- A partir de ahora, para poder usar este recurso, tendremos que crear dos strams: un TFileStream y un TResourceStream.
Crear el TResourceStream pasándole por parámetro las informaciones necesarias para la obertura del recurso incluido:
delphi
MiResourceStream := TResourceStream.Create(hInstance, Nombre, RT_RCDATA);
- hInstance es el handle de la aplicación
- Nombre es un string que contiene el nombre del recurso que queremos extraer. Si tomamos el ejemplo anterior, nombre = "BlocDeNotas"
- RT_RCDATA indica el tipo de recurso, como se ha especificado en el fichero nombre.rc
ahora creamos el TFileStream en modo creación de fichero (opción fmCreate) dándole el nombre de fichero que queramos y ejecutamos la instrucción:
delphi
MiFileStream.CopyFrom(MiResourceStream);
Esta operación extrae un fichero incluido como recurso en la carpeta deseada.
Para más información de uso de recursos con nuestra aplicación, aconsejamos la lectura de este artÃculo de DelphiCool (web en francés).
También decir que existe un componente shareware, TRCData, que permite esta operación en diseño (web en francés)