ある時点で、DelphiでコンパイルされたEXEをより小さなダウンロードサイズに壊す素敵な小さな圧縮ユーティリティがありましたが、今はそれを見つけることができません。何かお勧めはありますか?
また、これらの種類のユーティリティを使用することの欠点はありますか?(私は主に地方/ダイヤルアップユーザーのダウンロード時間を短縮するためにそれらを使用します)。
ある時点で、DelphiでコンパイルされたEXEをより小さなダウンロードサイズに壊す素敵な小さな圧縮ユーティリティがありましたが、今はそれを見つけることができません。何かお勧めはありますか?
また、これらの種類のユーティリティを使用することの欠点はありますか?(私は主に地方/ダイヤルアップユーザーのダウンロード時間を短縮するためにそれらを使用します)。
数年前、ダウンロードを小さくするために実行可能ファイルを圧縮することを検討しました。
私がやったこと、そして私があなたに勧めることは、代わりにInnoSetupのようなインストーラープログラムを使うことです。プログラムをインストール/アンインストールする単一のEXEを作成するだけでなく、別のコンプレッサーが実行可能ファイルのみに対して行うのと実質的に同じように、そのEXEを圧縮します。
プログラムをインストールすると解凍されるため、ウイルスのようには見えず、読み込み時間が長くなることはありません。
そのため、ダウンロードサイズを小さくすると同時に、プロ並みのインストールスクリプトを使用できるというメリットがあります。
psInnoSetupは無料です。
推奨事項は次のとおりではありません。
このクレイジーな見た目のサイトは、私が遠い昔に聞いた議論を引き起こします(それが真実であるかどうかにかかわらず、今日は確かではありません、現代のパッカーはおそらく今日異なる戦略を持っています)この記事はWin32を参照しています!:)
http://topic.csdn.net/t/20000408/08/6785.html
Windows 95/98やNTなどの最新のマルチタスクOSは、いわゆる「仮想メモリ」システムを使用しています。プログラムが起動すると、DOSプログラムの場合のように、起動直後にすべてのコードがメモリにロードされるわけではありません。代わりに、アクティブに実行されているコードの一部のみがメモリに格納されます。たとえば、プログラムのメニューに[印刷]オプションがあり、その背後に印刷を処理するコードがあるとします。このコードは、ユーザーが最初に印刷機能を選択した場合にのみメモリにロードされます。また、コードがメモリにロードされた後、印刷機能がしばらく使用されない場合、別のアプリケーションがどうしてもメモリを必要とする場合、システムはコードを「破棄」し、コードが占有していたメモリを解放します。これは「ページング」と呼ばれるプロセスの一部です
Win32でページングすることでメモリを節約する別の方法は、プログラム(またはDLL)の複数のインスタンスがコード用に同じメモリを共有するようにすることです。つまり、通常の状況では、プログラムの100個のインスタンスを開始する場合と1つのインスタンスを開始する場合で、コードに割り当てられる物理メモリの量に実際の違いはありません。
すべてのWin32プログラムがDOSプログラムのように動作し、すべてをメモリにロードして、プログラムが終了するまでそこに保持し、複数のインスタンス間でメモリを共有しない場合、限られた量のシステムで物理メモリがどれだけ早く不足し、原因となるか想像できます。ディスクスワッピングを開始します。
しかし、これはまさに現在のWin32EXEコンプレッサーがEXE/DLLに対して行うことです。すべてのコードをメモリに解凍し、終了するまでそこに保持することで、OSのページングシステムに完全に反します。また、コードはEXEファイルに「生の」形式で保存されないため(つまり、メモリに保存されるのと同じ方法で)、OSは複数のインスタンス間でコードを共有できません。
Delphi専用のものはわかりませんが、UPXはこの種のもので非常に人気があります。唯一の欠点は、実行可能ファイルを起動するときに解凍する必要があることです。これには時間がかかる可能性があります。ただし、まともなサイズの実行可能ファイルの場合は非常に高速のようです。
おそらく考えているのはASPackです。これはDelphiで記述されたEXEコンプレッサーですが、すべてのEXEを圧縮します。ただし、DelphiEXEではさらにうまくいく可能性があります。ダウンロード時間を節約するためだけにEXEコンプレッサーを使用するべきではないという他の回答に同意します。EXE圧縮が適切な特定の状況があるかもしれませんが、一般的にはそうではありません。
代わりに、特に7zip圧縮を使用するものが見つかった場合は、優れたインストールビルダーを使用してください。InstallAwareは最大の圧縮のために内部で7zipを使用していることを知っています。所有しているDelphiのバージョンによっては、InstallAwareライセンスも持っている場合があります。
他に何もなければ、7zipを使用した基本的なインストール動作で自己解凍型アーカイブを無料で構築できます。これは、インストーラー用のSFXの個別のダウンロードです。
最大圧縮には、lzmaオプションを指定したUPXを使用します。
upx --lzma yourfile.exe
圧縮されたEXEまたはDLLの主な不便は、OSが複数のインスタンス間でコードを共有できないことです。
したがって、メモリを浪費し、インスタンスを起動するたびに解凍する必要があり、圧縮インストールよりもダウンロードの利点がなくても、ウイルスのような動作を示します。
唯一のポジティブなケースは、ネットワークドライブから直接起動する場合です。
ターミナルサーバー(Citrixなど)は、圧縮されていない場合、アプリケーションバイナリと同じメモリを使用すると思います。圧縮されたexeは、Citrix環境で小さな災害の匂いがする可能性があることを意味します。
しばらく前に、ここSOでDelphi実行可能ファイルでUPXを使用することの短所について質問したところ、いくつかのすばらしい回答が得られました。
UPXは動作するはずですが、Delphi固有ではありません。
私はPEtiteを使用しています:http://un4seen.com/petite/
私もupxに投票します。言及された欠点に加えて、それは基本的なリバースエンジニアリングとそれらの不完全な「リソースハッカー」ツールからも保護します。ちなみに、これは十分であり、それらのほとんどは圧縮された実行可能ファイルを開くことができません。
PECompactは簡単に復号化できないため、使用できます。テストで示されたように(メインページに表示され、少し下にスクロールするだけです)、ASPackやUPXよりも優れています。以前のDelphiプロジェクトで使用していました。