7zipでインストーラーっぽいものを作ってみる話
ブログに飽きたわけじゃなくて単純に平日忙しいだけなんです
ということで1ヶ月ぶりの投稿になります
あまり自分個人が特定できるような話はしたくないのですが、今回は仕事絡みの話です
職業としては一応IT関係っぽいことをやっています
その中で"クライアントPCにソフトウェアをインストールする"という仕組みを作る必要があり、
プログラマーではない、知識ゼロの自分が色々なサイトをググって実現するところまでもっていけたので
それらをこの1記事でまとめておこうと思います
今回の要件はざっとこんな感じでした
- WindowsPCのCドライブ内の特定のフォルダにソフトウェアのインストールに必要なファイルやプログラムを展開する
- インストールプログラムは展開されるsetup.exeによって実行される
- ユーザはダウロードしたインストーラーをダブルクリックして実行することで上記の展開からsetup.exeによるインストールまでを自動で行える
既にインストールプログラムは開発済みだったので、あくまで今回必要となったのは
"クライアントPCに必要なファイル群を展開し、自動でsetup.exeを起動する"
という仕組みです
さて、これらを実現するにあたってまずは必要なものを揃えます
【必要なもの】
-
7zip
あんまり説明の必要ないですね、有名な圧縮・解凍ソフトです
-
7zSD.sfx
何これ、って言われると実は自分自身もあんまり分かっていません
とりあえず今回の仕組みを実現するにあたって必要なコンポーネントという認識です
実はこれを準備するのに今回一番手間取りました
今回のこのブログの内容でやってること、結構いろいろなサイトで
同じ内容が紹介されているのですがどれも記事が古く、「この7zSDは7zipの中にある」と書いてあります
けれども実際、今の7zipにこれはありません
またあったとしても7zSDの古いバージョンを使うと、今回やろうとすることができません
色々なバージョンを使ってみた結果、2016年頃以降の7zSDならできるようです
(とりあえず上記のgithubのもので実現できるはずです) -
コマンドプロンプト
必要なもの、というか開発時に使うことになりますというだけ
-
テキストエディタ
UTF-8形式で保存できるものであれば何でもいいです
ちなみに個人的に最近ハマっているエディタはVisual Studio Code
【インストーラーっぽいものの作り方】
それではいよいよ作っていきましょう
たったの4ステップでできます
1.展開したいファイルやプログラム郡を7zipで圧縮する
既に作成済みのsetup.exeや必要になるファイルなどを7z形式で圧縮してまとめます
この時、注意が必要なのですが1つのフォルダにまとめてから圧縮するとディレクトリ構造が変わってしまうためか展開時に失敗します
なのでオススメとしては展開したいファイルを1つずつCtrlキーを押しながら選択してから右クリックで"7-zip" > "圧縮"
今回は"archive.7z"という名前で圧縮しますが、ファイル名は何でも良いです
注意が必要なのは"パス名出力方法"は必ず"相対パス"であること、くらいです
とりあえずこれでクライアントPCに展開されるファイル郡はarchive.7zという1ファイルにまとまりました
2.configファイルを作成する
次にarchive.7zで圧縮したファイル郡を展開する時の定義ファイルを作ります
UTF-8形式で以下のようなテキストファイルを作成しましょう
;!@Install@!UTF-8! Title="Program Setup" Directory="C:\\ProgramA" InstallPath="C:\\ProgramA" BeginPrompt="プログラムのインストールを開始します。" RunProgram="setup.exe" ;!@InstallEnd@!
1行目と最後の行はお約束のようなものなので特に何も変えなくて良いです
2行目の"Title"にはユーザに表示するプロンプトのタイトル名を入れます
3,4行目には圧縮したファイル郡を展開したいディレクトリパスを指定します
パスの区切り文字は二重に入れるのがお作法のようです
今回の指定の仕方ではCドライブ直下に"ProgramA"というフォルダを作成し、そこにファイルを展開します
5行目の"BeginPrompt"ではユーザに見せるプロンプト内のメッセージを指定します
6行目の"RunProgram"では圧縮ファイル展開後に自動起動させたいプログラムを指定します
ここでは"setup.exe"を起動するために"RunProgram"を指定していますが、スクリプトファイルやバッチを指定する場合は
"RunProgram"ではなく"ExecuteFile"で記述するようです
詳しくはここ見たら分かるかも(流し読みしかしてないですが)
書けたらconfig.txtといった名前をつけて、先程作成したarchive.7zと同じ作業ディレクトリに保存しておきます
ついでに7zSD.sfxも同じ作業ディレクトリに保存しておきます
3.exe化する
それではいよいよexe化します
コマンドプロンプトを起動し、archive.7zとconfig.txtと7zSD.sfxが保存してある作業ディレクトリへ移動します
そして以下コマンドを実行するだけでexe化されます
copy /b 7zSD.sfx + config.txt + archive.7z Install.exe
Windowsのcopyコマンドで今回作成した3つのファイルを1つにまとめ、"Install.exe"として作成していますね
4.インストーラーを実行してみる
作業ディレクトリ内に"Install.exe"ができているはずなので実行してみます
先程config.txtで指定したプロンプトのタイトルとメッセージが表示されていますね
"はい"を選択するとこの後、指定したディレクトリ(C:\ProgramA)にファイルが展開され、setup.exeが自動起動します
ということでこれにて7zipを利用してインストーラーっぽいものができました
・・・まぁ要は自己解凍書庫を作って、展開後に自動でプログラムを呼び出しているだけです
ここまででレジストリも特に汚さず、PCへの影響が少ないので個人的にはこの展開方法好きですね
プログラマーじゃない人間がここまで実現できれば十分じゃないでしょうか
それでは