キャビネットファイルを作るには

解決


初心者  2005-01-25 08:09:31  No: 56134

Cab32.dllを使って自己解凍書庫を作ろうと思ったのですが、このファイルを使って作成する場合、解凍時に実行するファイル(つまりインストーラ)を自分で指定することはできるのでしょうか?


シャノン  2005-01-25 20:37:12  No: 56135

Cab32.dll に同梱されているドキュメントを斜め読みした限りでは、そのような機能について書かれているものはありませんね。

ここで質問すると、より濃い答えが得られると思います。
http://www.madobe.net/archiver/dev/ml.html


初心者  2005-01-26 06:19:52  No: 56136

なるほど・・・。
ではマイクロソフトのCabinet SDKではどうでしょう?
そういう記述があるようには思えなかったのですが・・・。


シャノン  2005-01-26 06:27:33  No: 56137

> ではマイクロソフトのCabinet SDKではどうでしょう?
> そういう記述があるようには思えなかったのですが・・・。

Cabinet SDK は読んでませんが、おそらく無いでしょうね。
解凍時に実行するファイルってのは、別に Cab ファイルの中にそういうデータが格納されているわけではなく、自己解凍 exe がサービスでやってくれているだけですから。
Cabinet SDK には、純粋にデータを Cab 圧縮/解凍するコードしか無いでしょう。


初心者  2005-01-26 06:47:55  No: 56138

あ、そうだったんですか・・・。

ではインストーラを作ろうと思ったら、自分でプログラム側に解凍処理を組み込んで、そのアプリのどこかに解凍すべきデータを組み込んでおく必要があるということですか?


シャノン  2005-01-26 07:15:17  No: 56139

既存のインストーラを使うのではなく、インストーラを作ろうとするなら、そういうことになります。
Cab ファイルの中に、圧縮するファイルと一緒に、インストーラの設定を書いた ini ファイルでも入れておいて、自己解凍プログラムが書庫を解凍する際にそれを読み込んで、書庫内のインストーラを実行するという流れになるでしょう。


初心者  2005-01-26 07:23:16  No: 56140

では使用者が最初にダブルクリックしたとき、どんな処理が行われることになるのでしょうか?
自分で作ったインストーラが実行されるのはその後ですよね?


シャノン  2005-01-26 21:55:37  No: 56141

自己解凍スタブと呼ばれる exe が実行されます。
インストーラ込み自己解凍書庫というのは、自己解凍スタブ+Cab 書庫ファイル(インストーラ入り)+自己解凍情報  から成り立つと思います。
自己解凍情報というのは、(Lha を例に取れば)特殊な名前のファイルで、解凍後に実行するアクション(インストーラを実行する、など)などが記述されています。

まず、自己解凍スタブが実行され、書庫ファイルを解凍します。
その際、特殊なファイル名の自己解凍情報ファイルは、読み込まれますがファイルとしては解凍されず、ユーザの目には見えません。
解凍が終わったら、読み込んでおいた情報ファイルの記述にしたがって、Cab ファイル内にあるインストーラが起動されます。

なお、これはあくまで例であり、この通りになるとは限りません。
情報ファイルを読み込むのは解凍した後ということも、解凍の最初ということもありえるでしょうし、自己解凍スタブとインストーラが一体化しているケースもありうるでしょう。
どういう形を取るかは、ケースバイケースです。


シャノン  2005-01-26 21:57:26  No: 56142

当初の質問「解凍後にインストーラを自動実行するような自己解凍書庫を作るには」という質問に答えるならば、「そういう自己解凍スタブを作ってください」という答えになります。


初心者  2005-01-27 02:26:56  No: 56143

つまり、解凍処理を組み込んだ自己解凍スタブと、自己解凍情報の設定ファイルを作ればいいのですか?

その際、自己解凍スタブや自己解凍処理のファイル名の決め方には何か規則があるのでしょうか?


シャノン  2005-01-27 04:22:00  No: 56144

> その際、自己解凍スタブや自己解凍処理のファイル名の決め方には何か規則があるのでしょうか?

一切ありません。お好きなように。
ただし、自己解凍スタブのファイル名=自己解凍書庫のファイル名ですから、ユーザが決められた方がいいでしょう。
また、自己解凍情報ファイルの名前は、書庫内に格納される他のファイル名とダブってはいけません。


シャノン  2005-01-27 04:23:28  No: 56145

> 自己解凍スタブのファイル名=自己解凍書庫のファイル名

補足しておくと…
自己解凍書庫というのは、自己解凍スタブである exe ファイルと、自己解凍ではない普通の書庫ファイルをくっつけて一つのファイルにしたものです。


初心者  2005-01-27 06:17:35  No: 56146

>補足しておくと…
>自己解凍書庫というのは、自己解凍スタブである exe ファイルと、自己解凍ではない普通の書庫ファイルをくっつけて一つのファイルにしたものです。

どうやって自己解凍スタブと普通の書庫ファイルをくっつけるのですか?


シャノン  2005-01-27 06:27:26  No: 56147

単にバイナリ的にくっつけるだけです。
copy /b でもいいし、プログラミング的にやるなら、ReadFile とか WriteFile とか使って。


初心者  2005-01-27 06:37:32  No: 56148

スタブを作って、その後ろに書庫を押し付ける(?)だけですか?


シャノン  2005-01-27 07:04:59  No: 56149

大抵の場合はそうです。
もちろん、スタブはどこからが書庫ファイル部分なのか、その始点を見つけて解凍することになります。


初心者  2005-01-27 07:18:42  No: 56150

なるほど。
丁寧に解説していただき、ありがとうございました。
がんばって作成してみたいと思います。


初心者  2005-01-27 07:19:11  No: 56151

すいません。
解決のチェックを忘れてしまいました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加