• ベストアンサー

以下のように複数のファイルをまとめてexeファイルにするソフトを作りた

以下のように複数のファイルをまとめてexeファイルにするソフトを作りたいと考えています(開発言語は、C#かVC++)。 (1)フォルダの中にexeファイル、batファイルやテキストファイルが入っています。 (2)(1)のファイルをまとめてexeファイルにします。 (3)(2)のexeファイルを実行すると、まとめられたファイルは解凍されて、解凍されたファイルの内の一つを実行します。 上記を実現する方法をご存じの方、教えて頂けると助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.2

私自身は使う側で実際のアプリ側開発を行っているわけではありませんが 圧縮・解凍用のアーカイバDLLは以前より統合アーカイバプロジェクト として公開されています http://www.madobe.net/archiver/main-j2.html >解凍する時に、解凍したファイルのどれか一つを指定して実行 でもってそれらDLL使って自己解凍のメニュー作成画面も作成できます 一例ですが http://www2.nsknet.or.jp/~micco/exp/sfxsample.htm にある SFXの設定例 等を見てください 作成された実行モジュールは指定したように動作します

kazuhirox
質問者

お礼

koi1234さん、再び回答頂きましてありがとうございました。 WinSFX32がやりたいことを実現しているソフトです! アーカイバDLLを用いて、これと同じものが作成できるか、もう少し調査してみます。 ありがとうございました。

その他の回答 (4)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.5

>一つに固めるファイル群は、実行時に指定します。 よく理解できていないかもしれませんが 例えば自分が作成したa.exeを実行した場合、別のb.exeをくっつけ、 もう一度a.exe実行時に、b.exeを解凍→実行 ということでしょうか? 最も簡単な方法はa.exe(自分自身)の後ろにバイナリをくっつける方法だと思います。 (確かexe自身の書き換えは可能だったと思います。) 問題は後ろにくっついたファイルのサイズと、ファイルがくっついたかどうかを判定する仕組みがあればよいですね。 例えば、a.exe(自分自身)の後ろから30バイトを読み取り「ABCDEFGHIJ0000000100______b.exe」であればABCDEFGHIJ でファイルがくっついていることを確認し100バイトを切り出して(解凍して)、b.exeを実行すれば良いんだな といったようなフォーマットを定義してはどうでしょうか。

kazuhirox
質問者

お礼

sha-girlさん、回答有り難うございました。 sha-girlさんの案を簡単に実現できるライブラリがあれば使ってみたいのですが、 自分で考えて実装するとなると、躊躇してしまいます。 ただ、このあたりを勉強すると、今後使えそうですので、ちょっと勉強してみます。

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.4

人様への反応になってしまいますが >この場合にも、リソースファイルは使用できるでしょうか? 無理だと思いますよ リソース使ってという話はそのアプリ作成前に確定してないといけませんので リソースファイルはVCのコンパイル・リンク時に使われます まともに自分でexe作成したいなら以下情報などが参考になるかもしれません (正直自前でやるようなもんじゃないです) http://codezine.jp/article/detail/419 ※ 全てちゃんと見るには(無料ですが)登録しないといけないようです (私未登録なので全て見れてません) 実際まとめるのがどのぐらいのファイル数・サイズなのか分かりませんが 圧縮などしないのであれば超巨大なexeファイルになってしまうかもしれません (そんなものまともに動くんだろうか って不安もあります) >アーカイバDLLを用いて、これと同じものが作成できるか 質問者さんの場合イメージとしてはそれらDLL使っている アプリケーションを作成することになります (例えば http://www.madobe.net/archiver/index.html にある対応アプリを作ることになります) (分かってるかもしれませんが) DLLの何かの関数呼べば#2に書いたような(WinSFX32)設定画面が出てくる ってことではないので其処はお気をつけください

kazuhirox
質問者

お礼

koi1234さん、回答有り難うございました。 リソースファイルは、やはりコンパイル時に確定していないといけないんですね。 もしかしたら行けるか!?と思ったのですが、ダメでしたね。。。 codezineの案は、やはりちょっと難しいですね。 ここまでやるなら、アーカイバDLLを使いたいと思います。 >DLLの何かの関数呼べば#2に書いたような(WinSFX32)設定画面が出てくる >ってことではないので其処はお気をつけください 逆に画面を出したくないので、その点は良かったです。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

自前でやる場合ですが、 Visual C++の場合、リソースファイルがありますよね。 (拡張子rcに記述されているものです) あそこにファイルの種類を問わずバイナリが置けます。 ですのでそこにexeなり、batなりを放り込み、 ファイルに展開後、WinAPIのCreateProcessなりWinExecを 実行すれば良いだけです。 生データではなく圧縮/解凍もしたいのであれば、事前にデータを圧縮しておきファイル展開時に解凍すれば良いです。 圧縮/解凍の方法ですが、 例えばzlib等はVisualC++用のプロジェクトファイル(lib作成用)も公開されているので使いやすいと思います。

kazuhirox
質問者

お礼

sha-girlさん、回答ありがとうございました。 説明に書き忘れてしまいましたが、一つに固めるファイル群は、 実行時に指定します。 この場合にも、リソースファイルは使用できるでしょうか? 再び質問してしまい、申し訳ありませんがご回答下さい。 よろしくお願いします。

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.1

実行モジュールのファイル名が重複するとまともに動きませんが lzh圧縮などで自動解凍のexeモジュール作れば可能ですが 全て自前でやるというのが前提ですか?  lzhでできるのは間違いないですがzipでも出来たかな・・・・忘れた  (lzh/zipと表現してるのは途中の圧縮ファイル形式で自己解凍にすると最終的にはexeとなります) ↑でいいのであればわざわざ自分で作る必要すらありません (肝心のexeやbatファイルは別)

kazuhirox
質問者

お礼

koi1234さん、回答ありがとうございます。 >全て自前でやるというのが前提ですか? 圧縮する部分は既存の圧縮ソフトなどを使ってもOKです。 (ただし、圧縮機能を自作ソフトに組み込めなくてはなりません) 複数のファイルを自己解凍形式で圧縮すれば、一つのexeファイルに 出来ることは知っていたのですが、自己解凍形式のファイルを 解凍する時に、解凍したファイルのどれか一つを指定して実行 できるのでしょうか? 再び質問して申し訳ありませんが、回答いただければ幸いです。

関連するQ&A

  • バッチファイルをexeへ

    バッチファイルで一連の処理を行うようなツールを作ったのですが、他者に実行内容を見せたくありません。 (セキュリティー的に+見栄え的に) batをexeのようなバイナリの実行ファイルに お手軽変換するようなツール等はありますか? 開発環境:WindowsXP (VBやVCのような開発ソフトは持っていません) 実行環境:WindowsXP、Windows2000 以上、よろしくお願いします。

  • VC++から引数付きexeファイルの実行

    タイトルの通り、VC++から外部ファイルを実行したいのですがどのような関数を使えばよいのでしょうか? exeファイルを実行中は親プロセスであるVCのプログラムの方を止めておきたいのです。 出来ればexeファイルは引数付きで実行したいと思いますので、よろしくお願いします。 開発環境はVisualStudio2005です。

  • 特定ディレクトリ以下の複数のフォルダ名とファイル名を一括で連番にするバッチの作成

    特定のフォルダ(ディレクトリ)以下の複数のフォルダ名とファイル名を 一括で連番にしてくれる方法(連番+拡張子のリネーム)を教えてください。 ソフトでは簡単ですが*.bat ファイルで実行するスクリプトを 知りたいので宜しくお願い致します 例えば フォルダ0 ├フォルダ1 │ ├ a.txt │ ├ b.jpg │ └ フォルダ2 │    └c.exe └ フォルダ3   └ d.exe という構造があったとして 000000 ├000001 │ ├ 000000.txt │ ├ 000001.txt │ └ 000000 │    └000000.txt └ 000002   └ 000000.txt この様に特定ディレクトリ以下の複数のフォルダ名とファイル名を連番 (上記は6桁ですが001,002…など3桁などに対応できる)にしたいのです 以下の方法で特定のフォルダ内のファイルを.txtに変更まではできましたが、 特定のフォルダより下層のファイルを.txtに変更はできませんでした。 REN E:\フォルダ\フォルダ\*.* *.txt 上記のスクリプトは特定フォルダにあるファイルは拡張子の変更が出来ますが、 そのフォルダより下層の複数のフォルダ名とファイル名の拡張子の変更をできないので、 *.batファイルで連番+拡張子のリネームを一括でするスクリプトの明記をお願い致します。 ご存知の方、どの様なご意見でも構いませんので ご回答頂けると幸いです。宜しくお願い致します。

  • PHPでexeファイル実行

    C言語でMPG形式の画像ファイルを読み込み、画像処理をしてテキスト形式で画像データを出力するプログラムを作成したのですが、 これをPHPプログラム内で動作させ、テキストデータ(できればバイナリのほうがいい)を読み取りたいと思います。 これはexeファイルをexecやsystem関数で実行することで解決できるのでしょうか? また、C言語の画像処理プログラムが画像を読み込んでからテキストデータを作成するまで1分ほどのタイムラグがあります。 どうすればPHP内の処理でexeファイル実行→exeがデータベースから画像を読み込む→ 1分処理待ち→テキスト作成→作成されたテキストデータをPHPで読み込み とできるのでしょうか? ちなみに、exeファイルとphpで作成した画像データベースはサーバー機に置くつもりです。 テキストデータを介さなくても、C言語プログラムからphpに直接データを渡す方法があればそちらのほうが望ましいです。 連続投稿で申し訳ないのですが、急を要するのでぜひともご解答お願いします。

    • ベストアンサー
    • PHP
  • 複数のbatファイルを自動実行したい

    複数のbatファイルがあり、それをさらにバッチ化したいのですが 1行目のbatファイルしか実行してくれません。 原因と対応をご存知であれば 教えて下さい。 以下のhhh.batを実行した場合、aaa.batしか実行してくれません。 (もちろん、単体ではそれそれ実行できます。) hhh.batファイルの中身 c:\aaa.bat c:\bbb.bat c:\cccbat

  • exeファイルが開けません

    先程、とあるexeファイルを 右クリック→アプリケーションから開く で実行しようとした際、誤って『Lhaca.exe』(圧縮・解凍ソフト)を選択してしまいました。 その際、『この拡張子のファイルを開く場合は、いつもこのアプリケーションを使う』といった様なチェックボックスにチェックしてしまいました。 すると、PC内の全てのexeファイルがそのアプリケーションで実行される様になってしまい、『ファイル"C\~"が見つかりません』と出て実行できません。 再度exeファイルを右クリックしても『アプリケーションから開く』のメニューが表示されず、設定をし直す事ができません。 どうすれば元に戻す事ができるか解らず、大変困っています。

  • 解凍するとexeファイルが消えてしまいます。あるRARファイルをwin

    解凍するとexeファイルが消えてしまいます。あるRARファイルをwinrarで表示するとフォルダ1とフォルダ2があり、フォルダ2の中にA.exeとB.exeの2つが入っているのですが、解凍するとA.exeしか解凍されず、B.exeが出てきません。 winrarで表示した際にB.exeをファイル→クリップボードにコピーして、ほかのファイルに貼り付けしようとすると貼り付けの項目は表示されるのですが貼り付けられません。 Lhaplusを使って解凍してみるとBフォルダが解凍されませんでした。 どうすればB.exeを取りだせるでしょうか。

  • 複数のファイルをパック化して読み込みたい

    過去の質問に 『C、C++でアーカイバ(ツール)作成』 http://oshiete1.goo.ne.jp/qa3411598.html というのがありました。これは複数のファイルを一つのテキストに全部データを 書き込んでまとめてしまうというものです。 このまとめる原理はなんとか理解できたのですが、それをどう利用するかがわかりません。 よく自作ゲームとかで音楽や画像などの複数のファイルを1つにパッキングしてそれを 利用していたりしますが、どうやって一つのファイルにまとまったものを 解凍することなくWinAPIやDirectXの関数にロードしているのでしょうか? 仮にパックしたものを解凍してからロードするのであればフォルダやファイルが作られて わざわざパック化した意味がないですし・・。

  • SQLサーバーのジョブでのexeファイル実行について教えてください。

    SQLサーバーのジョブでのexeファイル実行について教えてください。 FTP転送を行うバッチ(拡張子bat)を作成しexeファイルに変換してから SQLサーバーのジョブから実行しようと思っています。 batファイルからexeファイルへの変換は WindowsのIExpressとBat_To_Exe_Converterというツールを使用しました。 SQLサーバーにジョブを作成してバッチを実行させようとしたんですが batファイルのままであれば実行できるのに、exeファイルで実行させようとすると ジョブが実行中のままになり止まってしまします。 exeファイルは直接実行させると想定の処理が実行させるので 壊れていることは無いと思います。 原因の検討がつかず困っています。 些細なことでもいいので何か教えて頂ければと思います。 宜しくお願いします。 尚、exeに変換するのはバッチファイルの中身を見せないようにする為です。

  • .exeファイルが起動できません.

    ・現象  .exeファイルを起動しようとすると,+Lhacaという圧縮解凍ソフトが起動し,起動しようとしたexeファイルのlzh圧縮したファイルをつくってしまいます.  どのexeファイルでも,同じ現象がおこります.  ダブルクリックで起動しても,スタートメニューから起動しても,ファイル名を指定して実行から起動しても,圧縮ファイルができてしまいます.  ただ,.xlsや.docのように,アプリケーションに関連付けられたファイルは開くことができます.  またエクスプローラは,左下のスタートボタンを右クリックすることで起動できます.  .exeファイルの関連付けが変更されたのでは?と考え,ここの質問を参考にし [スタート]-[ファイル名を指定し実行] から command を実行 次のコマンドを実行 C:\>assoc .exe=exefile C:\>ftype exefile="%1" %* を行ってみたのですが,状況は変わりませんでした.  エクスプローラのフォルダオプション,ファイルの種類タブから関連付けを見たのですが,exeは登録がありませんでした.  再起動もしてみたのですが,Windows起動時のスタートアップ等で,自動実行されるファイルの圧縮が行われるだけでした. なんとか元に戻したいと思いますので,何卒宜しくお願い致します.

専門家に質問してみよう