2

私は7zまたはwinrarを使用できることを知っていますが、これを自分で学びたいです.

自己解凍アーカイブを実装するにはどうすればよいですか? C# または C++ を使用できますが、問題を詳しく説明させてください。

exeを開くと、ファイルを抽出する場所を尋ねるある種のGUIが必要です。ユーザーがOKと言ったら、明らかにそれらを抽出する必要があります。私はすでに C# winforms で簡単な例を実装しましたが、私の問題は、ファイル名とファイルのバイナリを exe に取得する方法です。

むかしむかし、exeの最後に余分なデータを追加しても安全ですか? 答えは、exeの最後にデータを追加するだけで、ウイルススキャナーによって検出される可能性があることを示唆しています。アーカイブの長さを最後の 4 バイトとして書き込み、データを汎用 exe に追加するのは非常に簡単です。プロセスが自分の exe を読み取ることができるので、これが機能すると思います。しかし、それはハッキリしているように感じますし、私がこの手法を使用しているという理由だけで、私がウイルスを書いていると非難されることはありません。これを実装する適切な方法は何ですか?

注:自己抽出タグを確認しましたが、多くの質問は自己抽出の操作方法であり、実装方法ではありません。他の何かを求めているこのものを除いて自己​​解凍型の自己チェック実行可能ファイル

-編集- 7z で 2 つの自己解凍を作成し、それらを比較しました。のように見えます...7z.sfxファイルですが、通常の7zアーカイブが追加されています。それで...これをしても問題はありませんか?より良い方法はありますか?私はWindowsをターゲットにしており、C#コンパイラを使用して支援できますが、余分な作業がどれだけあるか、プログラムでどれだけ難しいかわかりません.exeの最後にデータを追加するのは悪くないですか?

4

1 に答える 1

1

可能です。アプリケーションの更新を配布する必要があるときに、次の手法を一度使用しましたが、エンドユーザーがアプリケーションファイルを変更する権限を持たないようにコンピューターが構成されていました。更新は、管理者アカウントにログオンして必要なファイルを更新することになっています(したがって、同じ問題が発生しました:単一の実行可能ファイルとして多くのファイルを配布する方法)。

解決策は、C#のファイルリソースでした。あなたがする必要があるのは:

  1. C#プロジェクトにリソースファイル(.resxで終わるファイル)を作成します。
  2. タイプ「ファイル」の新しいリソースを追加します。byte[]既存のファイルをリソースとして簡単に追加できます。
  3. プログラムでは、リソースをファイルとして抽出するだけです。
System.IO.FileStream file = new System.IO.FileStream("C:\\PathToFile",
    System.IO.FileMode.OpenOrCreate);
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(file);
writer.Write(UpdateApplication.Data.DataValue, 0, UpdateApplication.Data.DataValue.Length);

(ここでUpdateApplication.Dataはバイナリリソースを示します)。

私たちのソリューションには圧縮がありませんでしたが、これはC#ZipLibなどのライブラリで簡単に実現できると思います。

この方法では完全で有効な実行可能ファイルが作成されるため、このソリューションがウイルススキャナーに対して安全であることを願っています。

于 2012-08-26T19:10:25.620 に答える