Domanda

A un certo punto ho avuto una piccola utility di compressione che ha distrutto il mio Delphi compilato EXE per una dimensione di download inferiore, ma ora non riesco a trovarlo. Qualche consiglio?

Inoltre, ci sono degli svantaggi nell'utilizzo di questo tipo di utility? (Li uso principalmente per abbreviare i tempi di download per utenti rurali / dial-up).


Domanda correlata: Esistono degli svantaggi nell'utilizzo di UPX per comprimere un eseguibile di Windows?

È stato utile?

Soluzione

Anni fa ho cercato di comprimere il mio eseguibile per ridurre il download.

Quello che ho finito per fare, e quello che consiglio per te, è usare un programma di installazione come Inno Setup invece. Non solo crea un singolo EXE che installa / disinstalla il tuo programma, ma comprime anche il fatto che EXE praticamente come farebbe un compressore separato sul tuo eseguibile da solo.

Quando il programma è installato, viene decompresso, quindi non sembra mai essere un virus e non aumenta i tempi di caricamento.

Quindi ottengo i vantaggi di dimensioni di download inferiori e di uno script di installazione dall'aspetto professionale allo stesso tempo.

P.S. Inno Setup è gratuito.

Altri suggerimenti

La raccomandazione è di non:

  • I compressori EXE possono far sembrare la tua applicazione un virus (auto-modificante)
  • gzip / zip sono altrettanto efficaci nella compressione e non armeggiano con la tua app
  • I compressori EXE fanno aumentare i tempi di caricamento della tua app (a meno che tu non stia solo parlando del programma di installazione che è una questione diversa

Questo sito dall'aspetto folle fa apparire una discussione che avevo ascoltato in un lontano passato (che sia vero o no ancora oggi, non sono sicuro, gli imballatori moderni probabilmente hanno una strategia diversa oggi) Questo articolo fa riferimento a Win32! :)

http://topic.csdn.net/t/20000408/08/ 6785.html

  

Moderni sistemi operativi multitasking come   Windows 95/98 e NT usano ciò che è   chiamato "memoria virtuale" sistema. quando   i programmi iniziano, tutto il loro codice è   non caricato immediatamente in memoria   all'avvio, come nel caso di DOS   programmi. Invece, solo porzioni di   il codice che viene eseguito attivamente lo sono   immagazzinato nella memoria. Ad esempio, diciamo   il tuo programma ha un'opzione di stampa sul suo   menu e codice dietro che gestisce   la stampa. Questo codice sarà solo   caricato in memoria una volta che la stampa   la funzione viene prima selezionata dall'utente.   E se dopo il codice viene caricato   memoria la funzione di stampa non viene utilizzata   per un po 'il sistema "scarterà"   il codice, liberando la memoria   occupato, se un'altra applicazione   ha un disperato bisogno di memoria. Questa è parte   di un processo chiamato " paging " ed è   completamente trasparente per il programma.

     

Un altro modo di cercapersone in Win32   conserva la memoria se causa molteplici   istanze di un programma (o DLL) su   condividere la stessa memoria per il codice. Nel   altre parole, in condizioni normali   circostanze non c'è reale   differenza nella quantità di fisico   memoria allocata per il codice tra   avviare 100 istanze di un programma   e avviare un'istanza.

     

Se tutti i programmi Win32 si sono comportati come   Programmi DOS, caricando tutto in   memoria e tenerlo lì fino al   programma terminato e anche no   condividere qualsiasi memoria tra più   casi, probabilmente puoi immaginare   quanto velocemente potrebbe funzionare la memoria fisica   su sistemi con un importo limitato,   causando l'avvio dello scambio del disco.

     

Eppure questo è esattamente ciò che è attuale   I compressori Win32 EXE fanno al tuo   di EXE / DLL! Vanno completamente   contro il sistema di paging del sistema operativo di   decomprimendo tutto il codice in memoria e   tenerlo lì fino alla risoluzione.   E poiché il codice non è archiviato in a   & Quot; greggio " formato nel file EXE (cioè il file   allo stesso modo in cui è memorizzato), il   Il sistema operativo non è in grado di condividere il codice tra   più istanze.

Non ne conosco uno specifico per Delphi, ma UPX è molto popolare per questo genere di cose. L'unico aspetto negativo è che l'eseguibile deve essere decompresso quando viene lanciato e che può richiedere del tempo. Sembra essere molto veloce per eseguibili di dimensioni sane, però.

Quello a cui probabilmente stai pensando è ASPack - è un compressore EXE scritto in Delphi, ma comprime qualsiasi EXE. Potrebbe fare comunque molto bene su Delphi EXE. Concordo con le altre risposte che non dovresti usare un compressore EXE solo per risparmiare sui tempi di download. Ci possono essere situazioni specifiche in cui una compressione EXE è una buona idea, ma generalmente non lo è.

Usa invece un buon costruttore di installazioni, specialmente se ne trovi uno che usa la compressione 7zip. So che InstallAware utilizza 7zip internamente per la massima compressione. A seconda di quali versioni di Delphi possiedi, potresti avere anche una licenza InstallAware.

Se non altro è possibile creare un archivio autoestraente con un comportamento di installazione di base con 7zip gratuitamente. È un download separato per SFX per installatori.

Utilizza UPX con l'opzione lzma per la massima compressione.

upx --lzma yourfile.exe

Il principale inconveniente di un file EXE o DLL compresso è che il sistema operativo non può condividere il codice tra più istanze.
Quindi stai sprecando memoria, devi decomprimere ogni volta che avvii un'istanza, esibire un comportamento simile a un virus senza nemmeno un vantaggio di download rispetto a un'installazione compressa.
L'unico caso positivo è quando si avvia direttamente da un'unità di rete.

Credo che i Terminal server (come Citrix) useranno la stessa memoria per il tuo binario dell'applicazione se non è compresso. Significa che un exe compresso potrebbe sentire un piccolo disastro in un ambiente Citrix.

UPX dovrebbe funzionare, sebbene non sia specifico di Delphi.

Vorrei anche votare per upx. Oltre agli aspetti negativi che sono stati menzionati, protegge anche dal reverse engineering di base e da quegli "hacker di risorse" scadenti utensili. Che tra l'altro sono molti, e molti di loro non riescono ad aprire un eseguibile compresso.

Ho fatto una domanda sui contro dell'uso di UPX sugli eseguibili Delphi qui su SO qualche tempo fa, e ho avuto delle ottime risposte.

Ci sono degli aspetti negativi da usando UPX per comprimere un eseguibile di Windows?

Puoi utilizzare PECompact poiché le persone non possono decifrarlo facilmente, e come mostra il test (mostrato nella pagina principale, basta scorrere un po 'verso il basso) è meglio di ASPack o UPX, l'ho usato nei miei precedenti progetti Delphi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top