Delphi EXE compresor? [cerrado]
-
03-07-2019 - |
Pregunta
En un momento tuve una pequeña utilidad de compresión que destruyó mis EXE compilados de Delphi a un tamaño de descarga más pequeño, pero ahora no puedo encontrarlo. ¿Alguna recomendación?
Además, ¿hay inconvenientes en el uso de este tipo de utilidades? (Los uso principalmente para acortar los tiempos de descarga para usuarios rurales / de acceso telefónico).
Pregunta relacionada: ¿Hay alguna desventaja al usar UPX para comprimir un ejecutable de Windows?
Solución
Hace años busqué comprimir mi ejecutable para hacer la descarga más pequeña.
Lo que terminé haciendo, y lo que te recomiendo, es usar un programa de instalación como Inno Setup en su lugar. No solo crea un único EXE que instalará / desinstalará su programa, sino que también comprime ese EXE prácticamente tanto como lo haría un compresor separado solo en su ejecutable.
Cuando se instala el programa, se descomprime, por lo que nunca parece ser un virus y no aumenta los tiempos de carga.
Entonces obtengo los beneficios de un tamaño de descarga más pequeño y un script de instalación de aspecto profesional al mismo tiempo.
p.s. Inno Setup es gratis.
Otros consejos
La recomendación es que no:
- Los compresores EXE pueden hacer que su aplicación parezca un virus (auto modificable)
- gzip / zip son tan efectivos para comprimir y no jugar con su aplicación
- Los compresores EXE aumentan los tiempos de carga de su aplicación (a menos que solo esté hablando del programa de instalación, que es un asunto diferente
Este sitio de aspecto loco presenta un argumento que había escuchado en un pasado lejano (ya sea cierto o no hoy, no estoy seguro, los empacadores modernos probablemente tengan una estrategia diferente hoy) ¡Este artículo hace referencia a Win32! :)
http://topic.csdn.net/t/20000408/08/ 6785.html
sistemas operativos multitarea modernos como Windows 95/98 y NT usan lo que es llamado una "memoria virtual" sistema. Cuando programas comienzan, todo su código es no cargado en la memoria de inmediato Al inicio, como fue el caso con DOS. programas En cambio, solo porciones de el código que se ejecuta activamente son almacenado en la memoria. Por ejemplo, di su programa tiene una opción de impresión en su menú, y código detrás de él que maneja La impresión. Este código solo será cargado en la memoria una vez que la impresión característica es primero seleccionada por el usuario. Y si después de cargar el código en memoria, la función Imprimir no se utiliza durante un tiempo el sistema descartará " " El código, liberando la memoria. ocupado, si otra aplicación Necesita desesperadamente memoria. Esto es parte de un proceso llamado " paginación " y es completamente transparente para el programa.
Otra forma de paginación bajo Win32 conserva la memoria es causa múltiples instancias de un programa (o DLL) para Comparte la misma memoria para el código. En otras palabras, bajo normal circunstancias no hay real diferencia en la cantidad de física memoria asignada para el código entre comenzando 100 instancias de un programa y comenzando una instancia.
Si todos los programas de Win32 se comportaron como Programas de DOS, cargando todo en memoria y mantenerlo allí hasta que el programa terminado y también no compartir cualquier memoria entre múltiples instancias, probablemente puedas imaginar la rapidez con la que se puede ejecutar la memoria física en sistemas con una cantidad limitada, haciendo que se inicie el intercambio de discos.
Sin embargo, esto es precisamente lo que actual Compresores Win32 EXE hacen a su EXE / DLL's! Van completamente contra el sistema de paginación del sistema operativo por descomprimir todo el código en la memoria y manteniéndolo allí hasta la terminación. Y porque el código no se almacena en un " crudo " formato en el archivo EXE (es decir, el de la misma manera que se almacena en la memoria), el El sistema operativo no puede compartir código entre múltiples instancias.
No conozco ninguno que sea específicamente para Delphi, pero UPX es muy popular para esto tipo de cosa. El único inconveniente es que el ejecutable debe descomprimirse cuando se inicia, y eso puede llevar algún tiempo. Sin embargo, parece ser muy rápido para ejecutables de tamaño razonable.
Probablemente esté pensando en ASPack : es un compresor EXE escrito en Delphi, pero Comprimirá cualquier archivo EXE. Sin embargo, podría funcionar mejor en Delphi EXE. Estoy de acuerdo con las otras respuestas de que no debe usar un compresor EXE solo para ahorrar tiempo de descarga. Puede haber situaciones específicas en las que una compresión EXE es una buena idea, pero generalmente no lo es.
En su lugar, use un buen generador de instalación, especialmente si puede encontrar uno que use compresión 7zip. Sé que InstallAware usa 7zip internamente para una compresión máxima. Dependiendo de las versiones de Delphi que tenga, también puede tener una licencia de InstallAware.
Si no puede hacer nada más, puede crear un archivo autoextraíble con un comportamiento de instalación básico con 7zip gratis. Es una descarga separada para SFX para instaladores.
Utilice UPX con la opción lzma para una compresión máxima.
upx --lzma yourfile.exe
El principal inconveniente de un EXE o DLL comprimido es que el sistema operativo no puede compartir el código entre varias instancias.
Por lo tanto, está desperdiciando memoria, tiene que descomprimir cada vez que inicia una instancia, exhibe un comportamiento similar a un virus sin siquiera una ventaja de descarga sobre una instalación comprimida.
El único caso positivo es cuando se inicia directamente desde una unidad de red.
Creo que los servidores de Terminal Server (como Citrix) usarán la misma memoria para su aplicación binaria si no está comprimida. Lo que significa que un exe comprimido podría oler un pequeño desastre en un entorno Citrix.
UPX debería funcionar, aunque no es específico de Delphi.
Uso PEtite: http://un4seen.com/petite/
También votaría por upx. Además de las desventajas que se mencionaron, también protege de la ingeniería inversa básica y de los "recursos piratas informáticos". herramientas. Las que, por cierto, son muchas y la mayoría de ellas no abren un ejecutable comprimido.
Hice una pregunta acerca de las desventajas de usar UPX en los ejecutables de Delphi aquí hace mucho tiempo, y obtuve algunas respuestas excelentes.
¿Hay algún inconveniente en usando UPX para comprimir un ejecutable de Windows?
Puede usar PECompact ya que las personas no pueden descifrarlo fácilmente, y como lo demostró la prueba (mostrado en la página principal, solo desplácese hacia abajo un poco) es mejor que ASPack o UPX, lo he usado en mis proyectos Delphi anteriores