2010-12-10 50 views
0

それでは、どのようにするのですか?(プログラムで)自己解凍型アーカイブを作成する方法

self-extracting_archiveにファイルをパックする方法。アルゴリズムとは何ですか?

+3

自己解凍形式のアーカイブ(ZIP形式、RAR形式、カスタム形式)はどのような種類ですか?それはクロスアーキテクチャ(x86/x64/ARM/...)である必要がありますか?クロスプラットフォーム(Win/Lin/Mac)?コンソール/ GUI /ハイブリッド?私たちに詳細を教えてください。 – Piskvor

+1

自己解凍形式の実行可能ファイルを作成します。これだけ重要です。 –

+1

これは、「私はVWバグ、モンスタートラック、バス、アウディv8、トラクタートレーラー、バイク、リンカーンリムジン、または三輪車であれば気にしません。しましょう。" 「ああ、それはおそらく存在する」よりも漠然としていない回答には、より多くのデータが必要です。あなたはおそらく*あまりにも高価ではない乗用車がほしいと思うかもしれませんが、誰もが20の質問をするのは好きではありません。 – Piskvor

答えて

6

7-zipでウィンドウの自己解凍型アーカイブを作成できます。プログラムで作成する場合は、SDKを使用できます。

+0

@Brian:http://www.wikihow.com/Use-7Zip-to-Create-Self-Extracting-excutablesしかし、私はちょうどSDKを通して同じ機能が存在すると仮定しました。 –

3

これを自分で実装する方法にもっと興味があるなら、実行可能ファイルにリンクされた圧縮データを持つ静的にリンクされたアプリケーションを持つことができます(例えば、小さなアーカイブの場合はstatic const char data[]配列十分)。実行時に、解凍ライブラリにデータを送り、実際にファイルを展開します。

実行可能ファイルのオーバーヘッドを小さくするために、ツールキットでリンクする必要がないように、システムAPI(Windowsのプレーンウィンドウコントロールなど)を使用する可能性があります。また、圧縮解除の場合は、圧縮サイズと圧縮解除速度との間で良好な妥協を提供するので、bzip2を使用します。 minilzoは、bzip2よりもコードフットプリントが小さく(実行ファイルが小さくなるため)、はるかに高い圧縮解除速度があるため、圧縮することはできません。

1

自己解凍アーカイブは、単に抽出プログラムですが、アーカイブファイルからデータを取り出すのではなく、プログラム自体で定義された定数から取得します。それは本当に概念的/アルゴリズム的レベルでは非常に単純なものです。

あなたのサイズを気にしない場合は、下記のような単純なもの持つことができます(それをシンプルに保つためにPythonでexempleを、実際のunarchiverはおそらくCまたはC++ソースからコンパイルされたプログラムになります):

hello_prog = """print "Hello, World"\n"""; 

f = file("./hello.py", "w"); 
f.write(hello_prog); 
f.close(); 

実行すると、python実行可能ファイルであるhello.pyというファイルが作成されます。

実際に自動抽出アーカイブを作成する場合は、通常、内部データを圧縮して、アーカイブ全体をできるだけ小さくしたいと考えています。また、抽出プログラムを可能な限り小さくし、ターゲットシステムですでに利用可能なものとできるだけ独立したものにしたいと思っています。それが問題の本当の始まりです。

関連する問題