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?

¿Fue útil?

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.

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

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