- ベストアンサー
以下のように複数のファイルをまとめてexeファイルにするソフトを作りた
以下のように複数のファイルをまとめてexeファイルにするソフトを作りたいと考えています(開発言語は、C#かVC++)。 (1)フォルダの中にexeファイル、batファイルやテキストファイルが入っています。 (2)(1)のファイルをまとめてexeファイルにします。 (3)(2)のexeファイルを実行すると、まとめられたファイルは解凍されて、解凍されたファイルの内の一つを実行します。 上記を実現する方法をご存じの方、教えて頂けると助かります。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
私自身は使う側で実際のアプリ側開発を行っているわけではありませんが 圧縮・解凍用のアーカイバDLLは以前より統合アーカイバプロジェクト として公開されています http://www.madobe.net/archiver/main-j2.html >解凍する時に、解凍したファイルのどれか一つを指定して実行 でもってそれらDLL使って自己解凍のメニュー作成画面も作成できます 一例ですが http://www2.nsknet.or.jp/~micco/exp/sfxsample.htm にある SFXの設定例 等を見てください 作成された実行モジュールは指定したように動作します
その他の回答 (4)
- sha-girl
- ベストアンサー率52% (430/816)
>一つに固めるファイル群は、実行時に指定します。 よく理解できていないかもしれませんが 例えば自分が作成したa.exeを実行した場合、別のb.exeをくっつけ、 もう一度a.exe実行時に、b.exeを解凍→実行 ということでしょうか? 最も簡単な方法はa.exe(自分自身)の後ろにバイナリをくっつける方法だと思います。 (確かexe自身の書き換えは可能だったと思います。) 問題は後ろにくっついたファイルのサイズと、ファイルがくっついたかどうかを判定する仕組みがあればよいですね。 例えば、a.exe(自分自身)の後ろから30バイトを読み取り「ABCDEFGHIJ0000000100______b.exe」であればABCDEFGHIJ でファイルがくっついていることを確認し100バイトを切り出して(解凍して)、b.exeを実行すれば良いんだな といったようなフォーマットを定義してはどうでしょうか。
お礼
sha-girlさん、回答有り難うございました。 sha-girlさんの案を簡単に実現できるライブラリがあれば使ってみたいのですが、 自分で考えて実装するとなると、躊躇してしまいます。 ただ、このあたりを勉強すると、今後使えそうですので、ちょっと勉強してみます。
- koi1234
- ベストアンサー率53% (1866/3459)
人様への反応になってしまいますが >この場合にも、リソースファイルは使用できるでしょうか? 無理だと思いますよ リソース使ってという話はそのアプリ作成前に確定してないといけませんので リソースファイルはVCのコンパイル・リンク時に使われます まともに自分でexe作成したいなら以下情報などが参考になるかもしれません (正直自前でやるようなもんじゃないです) http://codezine.jp/article/detail/419 ※ 全てちゃんと見るには(無料ですが)登録しないといけないようです (私未登録なので全て見れてません) 実際まとめるのがどのぐらいのファイル数・サイズなのか分かりませんが 圧縮などしないのであれば超巨大なexeファイルになってしまうかもしれません (そんなものまともに動くんだろうか って不安もあります) >アーカイバDLLを用いて、これと同じものが作成できるか 質問者さんの場合イメージとしてはそれらDLL使っている アプリケーションを作成することになります (例えば http://www.madobe.net/archiver/index.html にある対応アプリを作ることになります) (分かってるかもしれませんが) DLLの何かの関数呼べば#2に書いたような(WinSFX32)設定画面が出てくる ってことではないので其処はお気をつけください
お礼
koi1234さん、回答有り難うございました。 リソースファイルは、やはりコンパイル時に確定していないといけないんですね。 もしかしたら行けるか!?と思ったのですが、ダメでしたね。。。 codezineの案は、やはりちょっと難しいですね。 ここまでやるなら、アーカイバDLLを使いたいと思います。 >DLLの何かの関数呼べば#2に書いたような(WinSFX32)設定画面が出てくる >ってことではないので其処はお気をつけください 逆に画面を出したくないので、その点は良かったです。
- sha-girl
- ベストアンサー率52% (430/816)
自前でやる場合ですが、 Visual C++の場合、リソースファイルがありますよね。 (拡張子rcに記述されているものです) あそこにファイルの種類を問わずバイナリが置けます。 ですのでそこにexeなり、batなりを放り込み、 ファイルに展開後、WinAPIのCreateProcessなりWinExecを 実行すれば良いだけです。 生データではなく圧縮/解凍もしたいのであれば、事前にデータを圧縮しておきファイル展開時に解凍すれば良いです。 圧縮/解凍の方法ですが、 例えばzlib等はVisualC++用のプロジェクトファイル(lib作成用)も公開されているので使いやすいと思います。
お礼
sha-girlさん、回答ありがとうございました。 説明に書き忘れてしまいましたが、一つに固めるファイル群は、 実行時に指定します。 この場合にも、リソースファイルは使用できるでしょうか? 再び質問してしまい、申し訳ありませんがご回答下さい。 よろしくお願いします。
- koi1234
- ベストアンサー率53% (1866/3459)
実行モジュールのファイル名が重複するとまともに動きませんが lzh圧縮などで自動解凍のexeモジュール作れば可能ですが 全て自前でやるというのが前提ですか? lzhでできるのは間違いないですがzipでも出来たかな・・・・忘れた (lzh/zipと表現してるのは途中の圧縮ファイル形式で自己解凍にすると最終的にはexeとなります) ↑でいいのであればわざわざ自分で作る必要すらありません (肝心のexeやbatファイルは別)
お礼
koi1234さん、回答ありがとうございます。 >全て自前でやるというのが前提ですか? 圧縮する部分は既存の圧縮ソフトなどを使ってもOKです。 (ただし、圧縮機能を自作ソフトに組み込めなくてはなりません) 複数のファイルを自己解凍形式で圧縮すれば、一つのexeファイルに 出来ることは知っていたのですが、自己解凍形式のファイルを 解凍する時に、解凍したファイルのどれか一つを指定して実行 できるのでしょうか? 再び質問して申し訳ありませんが、回答いただければ幸いです。
お礼
koi1234さん、再び回答頂きましてありがとうございました。 WinSFX32がやりたいことを実現しているソフトです! アーカイバDLLを用いて、これと同じものが作成できるか、もう少し調査してみます。 ありがとうございました。