7-zipによるsfx

.NETでインストーラープロジェクトを作ると、msiファイルとsetup.exe(msiファイルのbootstrapper)が出来るが、これを一つのファイルにまとめて配布したい。出来れば、最初実行したときに「ほげほげソフトをインストールしますか?」とかダイアログが出てくるのが好ましい。これには7-zipがおあつらえ向けだ。(7-zipの自己解凍書庫は商用利用もok→id:yaneurao:20060816)


7-zipを使えば、自己解凍のあとsetup.exeを自動起動する、なんてことが出来る。


さっそく、Dobonさんの記事を参考にしながらやってみた。


コマンドプロンプトで次のようなコマンドを実行し、3つのファイルを結合する。7zS.sfxは7-Zip
インストールしたフォルダにある。(7zS.sfxのファイル名)は (7zSD.sfxのファイル名)でもよい。
7zS.sfxはMSVCRT.dllを使用しないが、7zSD.sfxは使用する。

私の頭が悪いのか、上の日本語は、意味がさっぱりわからない。


「7zS.sfxは7-Zipをインストールしたフォルダにある」と書いてあるが、そんなファイルは無いのだ。


「(7zS.sfxのファイル名)」とは何なのだ?「(7zS.sfxのファイル名)」は「7zS.sfx」とは違うのか?


で、いろいろ調べたところ、最新のバージョンでは、この7zS.sfxは別で配布されるようになったようだ。


日本語の7-zipサイトの「7z Library, SFXs for installers, Plugin for FAR Manager」のところからdownload出来る。日本語ファイルのところしか見ていなかったので気がつかなかった。


しかし、これに対応する日本語パッチが存在しないので、展開時に何かエラーが発生すると英語が表示される。正直、気分が悪いが、まあいいや。あとは…。


config.txtとして、以下のように書いてUTF-8で保存。


;!@Install@!UTF-8!
Title="○○のインストール"
BeginPrompt="○○のインストールを開始します。よろしいですか?"
RunProgram="Setup.exe"
;!@InstallEnd@!

コマンドプロンプトから、以下の行を実行。


copy /b 7zS.sfx + config.txt + Release.7z setup.exe

などとすれば、無事、自己解凍後に自動起動するするファイルが作成できる。7zS.sfxと言うファイルの末尾に展開時の設定ファイルとアーカイブをバイナリレベルで結合しているだけ、という何ともシンプルな作りだ。


しかし、もうちょっとユーザーフレンドリーなGUIにならんかね?ZELDAという補助ソフトがあるのだけど、これシェアウェアな上に、説明が古いのよね。


ZELDAで7z形式を扱う上で必要なのは、7-Zip(2.30 Beta13以降)に含まれる以下のファイルです。

だから、含まれてないとゆうちょるに…(つω`)


まあ、そんなわけで、たったこれだけのことなのだけど結構、苦労した。