• ベストアンサー

インストーラーの仕組み

ActiveBasic4.23.00を使用しています。 市販のゲームなどを買い、パソコンに入れるときにさまざまなインストーラーを見ます。 今、自作ゲームでインストーラーもゲームにあわせて自作したいと考えているのですが、仕組みが分かりません。 以前リソースを追加/読み出すやり方を質問させていただいたことがあり、 それを応用してみようかな・・・と使ってみたところ、 ファイルの重さが一定を超えると、なぜかエラーが返ってきます。 なので、ファイルを1MBずつに分割すると、全部を入れることは出来ました。 しかし、メモリーやCPUをものすごく使い、動作が遅くなってしまいます。 (しかも復元したらなぜかファイルが0KBとなってしまいますし・・・) 市販のインストーラーでは、全然そんなことは起こりません。 これはどういう仕組みになっているのでしょうか。 知っている方がいらっしゃいましたら、ご教授お願いします。

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

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

>なので、exeにファイルをまとめてしまいたいわけです。 圧縮ツールを使わずに自前でやるという理解でよいですか? ならば、exeファイルの構造を理解してください。 http://codezine.jp/article/detail/403?p=1 http://f4.aaa.livedoor.jp/~madprog/doc/pe-01.html http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html ここまでくるとリンカや機械語のデータアクセスの仕組みあたりも多少知識を必要とします。 で、バイナリデータのファイルとして必要なデータ構造で書き出してやる必要があります。とうぜん解凍するツールプログラムの内容も含む必要があります。これには色々手法がありますが簡単には語れません。 参考になりそうなのは、たまたま見つけたんですがOar32.dllですかね。 ActiveBasicだしソースコード付きです。 http://hira.hopto.org/ab.htm まぁ、このDLLを使うほうが簡単ですけどね。 もうひとつの手はActiveBasicのソースコードとしてインストールファイルのデータを持つ方法です。インストールする全てのファイルをDATA文などに変換してしまうわけです。 当然圧縮を考えないといけませんし、データ化とインストーラでツールが2つも必要になるのとインストーラは毎回コンパイルが必要となります。 この方法の方が簡単ですが毎回手間が掛かりますのでスマートではありません。

if-so-at
質問者

お礼

ご回答ありがとうございます。 ふむふむ・・・ 勉強になります。 確かに、これは難しそうです。 インストーラーは、将来の目標と言うことで一時保留にします。 せっかく紹介していただいたので、 http://www.yaoyorozu-kobo.com/download/DSetup26/help.htm のほうも参考にさせていただきますね。 ありがとうございました

その他の回答 (3)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

普通のインストーラが扱うのは単なるファイルでリソースではありません。 テキストでも何でも良いのですが、コピー元のファイルリストを参照しながらCD等からコピーしているだけです。 それとインストールしたものをアンインストール時に削除する仕組みが無いと不親切ですので、レジストリは使わなくても良いですが何らかの仕組みは必要です。 で、インストーラを作るのに必要な知識を列挙します。 ・どこのフォルダにインストールするかを問い合わせる仕組み。フォルダダイアログなどを使う。 ・デフォルトで"Program Files"下に作成するのであれば、実は固定名ではないProgram Filesディレクトリの名前をWindowsAPIに問い合わせする事。 ・Vista等で動く場合の管理者権限と利用者権限の動作の違いについての違いの知識(ややこしいので省略)。管理者権限で無いとProgram Files下にファイルはコピーも作成も出来ません。どうやって管理者権限に昇格するか分かりますか? ・プログラムからフォルダ作成する方法は知っている必要あり。 ・ファイルの入出力の知識。属性変更なども状況に応じて変更する必要がある。ようはコピーは元の場所からファイルを読み込んで目的の場所に書き込む事で実現できる。そのとき元の属性や日付もコピーする必要があるのでファイル関連の知識が必要。バージョン管理しないなら適当でも良いですけどね。 ・ファイルコピー中のエラー処理の知識。コピー先の容量不足、コピー元ファイルの破損や不足などに対処したプログラムが書けるだけの知識。 ・ダウンロード配布を考えている場合は圧縮・展開の仕組みが必要。 ・アンインストーラも同梱するので、フォルダやファイルなどのプログラムでの削除方法の知識。 簡単なインストーラでもこのぐらいは必要ですね。

if-so-at
質問者

お礼

ご回答ありがとうございます。 もうひとつ訂正させていただきます。 自分がやりたいのは、『ファイル類の展開』です。 Lhaplusの『exe圧縮』のような感じです。 なので、exeにファイルをまとめてしまいたいわけです。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

あれこれ悩まず、これで良いのでは? http://www.yaoyorozu-kobo.com/download/DSetup26/help.htm それと市販ソフトのやってことも単なるコピー+更新日付のチェックで、バッチのxcopyコマンドと同等のCのコードで実行されていると思います。どういうアルゴリズムで実装されたのか分かりませんが、実装コードの問題かActiveBasicの限界なのでしょう。 インストーラを作るには、WindowsAPIやメモリ管理、ファイルシステムなどOSの仕組みにある程度詳しくないと様々なトラブルを引き起こしますので本気で取り組みたいなら別ですが、どの程度本気なのでしょうか?ディスクの容量不足のチェックやWindowsのバージョンチェックなどやる気がありますか? それにアンインストールための情報をレジストリに登録する事は避けれませんのでレジストリをいじる必要はありますよ。

if-so-at
質問者

お礼

ご回答ありがとうございます 失礼ですが、私の書いた事を読んで頂けましたでしょうか? プログラムの練習をかねて知りたいということです。 もちろん自分で作れなかった場合は、素直に諦めるつもりですが まだ大まかな仕組みの回答を得られていません。 『コピー』とありますが、結局リソースからファイルを読み込んでいるということでしょうか? またその際、一定以上の大きさのファイルをリソースに追加しようとするとエラーが返るのですが、どう対処しているのでしょうか?? それとこちらの表現が悪かったのですが、別にレジストリは必要ありません。 exeを実行して、データをパソコンの中に展開出来ればいいのです そのときに、指定した場所に自動的にテキストファイルを展開したいと考えているだけなので

  • tom233
  • ベストアンサー率17% (61/352)
回答No.1

そもそもインストーラーを自作する意味は? 既存のインストーラーのシステムを利用すればいいのでは?

if-so-at
質問者

お礼

ご回答ありがとうございます 自作する意味は、『欲しい機能を自由に付けたいから』です。 既存のものを使用してもいいのですが、いろいろ条件がついてくると思います。 例として、『有償物での使用禁止』などです。 サークル活動しているので、ゲームは有償配布となってしまいます。 そして、ゲームは違う言語(LiveMaker)を使用する予定なので、それに合わせなければいけません。 シリアルキーなどを読み込ませるときに、LMはレジストリを開けなかったと思いますし、そもそもレジストリをいじるのは好きではありません。 怖いですし。 なので、自分のプログラムの勉強をかねて作ってみようと思い、 知識をかしていただくために書き込みをしました。 ご理解のほうをお願いします