Pregunta

¿Hay una manera de enlazar un archivo .exe existente con otros archivos de código fuente de C ++ durante la compilación? Lo que en realidad estoy tratando de hacer es comprimir y descomprimir algunos archivos en mi programa de consola utilizando LZMA (7zip) SDK pero desafortunadamente es muy difícil de usar para un novato.

Hay una versión de línea de comandos de LZMA llamada 7za.exe y me pregunto si de alguna manera puedo incrustar en mi programa y usarlo como una función. Puede ser utilizado fácilmente con la función del sistema () (lo que parece ser una cosa muy peligrosa para su uso), pero luego si envío mi programa para alguien que no tiene el derecho 7za.exe en carpeta no va a funcionar.

Me encontré con CreateProcess () en los archivos de cabecera windows.h pero parece que para lograr lo que el sistema () hace de una manera más adecuada y avanzada. No sé si realmente puede el archivo ejecutable como un archivo objeto durante la compilación

¿Fue útil?

Solución

CreateProcess() es una llamada a la API de Windows para iniciar un proceso, tal y como suena, como un hijo de su programa que se puede controlar por saberlo de HANDLE. system() ejecuta un comando del sistema. Eso es tanto como lo que nunca sabrás y yo personalmente no lo utilice a toda costa - entre otras razones porque no es portátil (la función existe en Windows y Linux, pero el comando no)

.

Es posible añadir los datos al final de una imagen EXE - así es como instaladores de trabajo. Echar un vistazo a este artículo de soporte de Microsoft , que extrañamente le da el código en el básico, pero usted debe estar capaz de convertirlo en C ++ trivial. He aquí un artículo sobre la creación de un extractor automático que podría ser más adecuado. Ambos se debería permitir a los archivos de incrustar en el exe.

No recomiendo extraer 7za y desde el cual lo System() o CreateProcess() - recomiendo que aprenda el SDK. Es difícil, pero usted va a aprender mucho de hacerlo.

Por último, ya que tendrá que modificar un archivo exe existente que no será capaz de hacer esto en tiempo de compilación. Usted necesita tener el código de agregar lo que a su propia imagen u otra imagen.

Más detalle en los datos de direccionamiento anexa a un exe .

Otros consejos

Bien, intente esto ...

  1. Escribir una utilidad de línea de comandos que simplemente copia un archivo al final de otro. Usted puede hacer esto con el archivo de Windows E / S o comandos shell.
  2. Haga un paso posterior a la generación que se ejecuta esta utilidad. Su programa totalmente vincular la forma habitual, y entonces su utilidad se limita append bytes de la segunda exe para el exe objetivo.

Ese es el paso de vinculación. Ahora el acceso en tiempo de ejecución para el exe es una cosa diferente. En esencia, el algoritmo es la siguiente:

  1. Abre el archivo EXE que se incrusta en un editor a nivel de byte binario (msdev.exe va a hacer). Tomar nota de los primeros 30 o 40 bytes como marcador único para el principio del archivo.
  2. Escribir una función que abre el archivo compuesto creado anteriormente y busca el archivo incrustado mediante la búsqueda de la marca única.
  3. Una vez encontrado el principio del archivo incrustado, copiar los bytes de ese archivo a un segundo archivo nuevo usando el archivo de E / S.
  4. Ejecutar el nuevo archivo utilizando el sistema () o API similar.

Si distribuye de otra persona funcionan de esta manera, por favor obtener la correcta concesión de licencias. En general, es una infracción de copyright a tirar de otra persona binario en su propio -. Hay excepciones, por supuesto

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top