2012-07-25 14 views
9

Tratando de crear algo similar a SFX (instalador autoextraíble), estaba incluyendo los archivos de configuración en un exe usando un recurso personalizado en Visual C++. Cuando el tamaño de los archivos de configuración alcanzó más de ~ 900 MB, el vinculador no puede generar un exe con los recursos incrustados. Lo extraño es que el enlazador genera un exe sin advertencias. El exe generado es una aplicación MFC estáticamente vinculada (aplicación principal del exectuable). Sin embargo, no se incluye el recurso. He visto el tamaño del exe durante el enlace desde una consola. Mostraba 900 MB por un tiempo antes de caer al exe de 2MB al final. Si eliminé algunos de los archivos (digamos que el tamaño total será de 500MB), el exe se genera todo OK con todos los recursos incrustados. ¿Hay un límite de tamaño práctico para el recurso personalizado? Tenga en cuenta que el tamaño final del ejecutable es de aproximadamente 1 GB, que es mucho menos que la aplicación win32 de 2 GB puede abordar. Entonces, me pregunto si esto es un error o característica de vC++ 2010. Por cierto, también usé/expectedoutputsize truco. Pero no ayuda, excepto que la vinculación es mucho más rápida con un mayor tamaño de salida esperado.Win32 ¿Qué tan grande puede ser el recurso personalizado?

+2

Los recursos de Win32 no son una buena forma de incluir grandes cantidades de datos. Simplemente agréguelo a su archivo comenzando en un desplazamiento conocido (más grande que el ejecutable mismo), y use las funciones de lectura de archivos habituales para acceder a él. –

+0

Otra opción sería incluir los datos de recursos sin procesar en un archivo de objetos y vincularlos en. En Linux/OS X, puede hacer esto con objcopy de GNU para convertir un archivo binario en un archivo de objeto, pero no estoy seguro de cómo harías eso en Win32 usando las herramientas de Microsoft. –

+0

Sí, para datos enormes, agregar un binario al exe tiene más sentido. Sin embargo, todavía creo que es un error del enlazador en VC++ 2010. Si me vinculé con la compilación de depuración, el problema desapareció. Así que experimenté una opción de enlazador, parece usar el/INCREMENTAL = ¡sí el truco! – Zhichao

Respuesta

0

Según la PECOFF Specification, el tamaño de las entradas de datos de recursos es de 4 bytes (IMAGE_RESOURCE_DATA_ENTRY.Size - ver winnt.h)

el tamaño, en bytes, de los datos de recursos que se apuntado por el campo Data RVA.

1

Respuesta tardía. Puede ser útil para otros. Puede que no sea una respuesta a su pregunta, pero esta puede ser una solución a su problema. Verifique el 'instalador de Bitrock'. Esto también le da al instalador de autoextracción. Lo utilicé con éxito en muchos de mis proyectos para el despliegue.

0

He respondido una respuesta similar here.

Básicamente, añada el número binario + mágico (separador único) al final del ejecutable. En tiempo de ejecución, abra el ejecutable para leer, encuentre el desplazamiento a través de un número mágico u otro método y el resto del archivo sea su gran información.

Cuestiones relacionadas