概要
インストーラーを作成するツールであるInno Setupについてまとめました。
目次
Inno Setupとは
Inno Setup(イノセットアップ)とは、Windows向けのインストーラー作成ツールで、1997年にジョーダン・ラッセル氏によって開発されたフリーソフトウェアです。Windowsアプリケーションのインストーラー(セットアップ.exe)を作成できます。
フリーソフトなので無料で使用でき、スクリプトも記載可能なため柔軟な設定も可能になっています。また、アンインストーラーも自動で生成してくれます。
使用場面
-
自作アプリを配布したいとき
インストーラー形式にすることで、利用者が迷わずインストールでき、アンインストールも容易になります。また依存ライブラリやランタイムを同梱できるのでユーザーが別途インストールする手間も省けます。 -
複数ファイルや設定ファイルを含んだアプリをまとめて配布したいとき
アプリの初期設定をインストーラーに組み込むことで、ユーザーはインストール直後からすぐに利用可能になります。
インストール方法
以下のサイトからダウンロードできます。
Inno Setup ダウンロード
インストーラー作成方法
以下のサイト様が参考になりました。
【InnoSetup】の使い方を理解し設定する-インストーラー作成-
初心者は上記のURLのようにウィザードを使用する方法が良いと思います。中級者以上は、スクリプトを編集するという方法もあります。
exeファイルやdllを配置する場所について
Inno Setupでは好きな場所にファイルを配置できますが、以下の点には注意が必要です。
-
DLL は基本的に EXE と同じフォルダに置く
検索順序の最優先が EXE と同じフォルダであるため、DLL ハイジャック(意図しない DLL が読み込まれる)のリスクを減らせます。 -
システムフォルダ(System32 等)には配置しない
他アプリと競合したり、OSの更新で上書きされる可能性ありますので、システムフォルダへの配置は非推奨です。 -
アプリ専用の DLL は必ず作成したアプリ専用のフォルダに置く
同じ名前の DLL でもバージョンが異なると動作が変わることがあります。アプリ専用の DLL は必ずアプリフォルダに置き、他アプリと共有しないのが原則です。
上記の通り、基本的にアプリ専用のフォルダを配置して、その中にファイル群を置く形になります。DLL をアプリごとに分離して管理する仕組みを Side-by-Side と言いますが、これにより「DLL Hell(DLL 地獄)」という問題を避けることができます。
基本的なスクリプト構造
Inno Setup では iss ファイル(Inno Setup Script)という独自のスクリプト形式を使ってインストーラーの挙動を定義しており、INIファイルに似たセクション構造([Setup], [Files], [Icons] など)で記述します。
基本は「設定ファイル」に近い書き方ですが、条件分岐や定義マクロも使えます。また、ウィザードを使うと自動でissのスクリプトが生成されます。
このスクリプトを Inno Setup Compiler でコンパイルすると、最終的に setup.exe が生成されます。
[Setup]
AppName=MyApp
AppVersion=1.0
DefaultDirName={pf}\MyApp
[Files]
Source: "bin\MyApp.exe"; DestDir: "{app}"
[Icons]
Name: "{group}\MyApp"; Filename: "{app}\MyApp.exe"
[Run]
Filename: "{app}\MyApp.exe"; Description: "アプリを起動"; Flags: nowait postinstall
- [Setup] : アプリ名、バージョン、インストール先などの基本情報
- [Files] : 配布するファイルの指定
- [Icons] : スタートメニューやデスクトップに作成するショートカット
- [Run] : インストール完了後に実行する処理(例: アプリ起動)
- [UninstallRun] : アンインストール時に実行する処理
Inno Setup の .iss ファイルにおける「;」の役割は2種類あります。行の先頭に ; がある場合、その行全体がコメントになりますが、途中での ; は「コメント」ではなく、複数のキーを並べるための区切り記号になります。
; この行はコメント扱いになる
AppName=MyApp
[Run]
Filename: "{app}\MyApp.exe"; Description: "アプリを起動"; Flags: nowait postinstall
また、標準のセクション記述だけでは足りない場合、[Code] セクションで Pascal Script を書くことができます。これにより、インストール時のカスタム処理(条件分岐、ユーザー入力に応じた動作など)が可能になります。
ウィザードで生成されるスクリプトには、Pascal Script は含まれません。ウィザードはあくまで「基本的なインストーラー」を作るためのものになります。
Pascal Scriptも iss ファイルの中に書きます。その際は [Code] セクションを使用します。以下はissファイルに記載した Pascal Script の一例です。
インストール開始前に確認ダイアログを出す
[Code]
function InitializeSetup(): Boolean;
begin
if MsgBox('本当にインストールを開始しますか?', mbConfirmation, MB_YESNO) = IDYES then
Result := True
else
Result := False;
end;
インストール完了後にメッセージを表示する
[Code]
procedure DeinitializeSetup();
begin
MsgBox('インストールが完了しました!ご利用ありがとうございます。', mbInformation, MB_OK);
end;
パスワード付きインストーラーを作成する
[Setup] セクションに Password= を書くと、インストーラー実行時に自動で「パスワード入力ページ」が表示されます。
その入力値は CheckPassword 関数に渡され、戻り値が True なら次に進み、False ならエラーを出して再入力を促します。
[Setup]
AppName=MyApp
AppVersion=1.0
DefaultDirName={pf}\MyApp
Password=secret123 ; ← この定義でパスワード入力ページが表示される
[Code]
function CheckPassword(Password: String): Boolean;
begin
if Password = 'secret123' then
Result := True
else
begin
MsgBox('パスワードが違います。', mbError, MB_OK);
Result := False;
end;
end;
Inno Setup には「特定のタイミングで呼ばれる関数名」が決まっています。
- InitializeSetup → インストーラー開始時に自動で呼ばれる
- CurStepChanged → インストール処理のステップが変わったときに呼ばれる
- DeinitializeSetup → インストーラー終了時に呼ばれる
これらの関数名は「名前が決まっている」ので、書くだけで自動的に呼び出されます。
もしくは下記のように、関数から関数は呼び出すことができます。
[Code]
procedure ShowThanksMessage();
begin
MsgBox('ご利用ありがとうございます!', mbInformation, MB_OK);
end;
function InitializeSetup(): Boolean;
begin
ShowThanksMessage(); // ← 自作メソッドを呼び出し
Result := True;
end;
終わりに
Inno Setup は初心者向けのウィザードからインストーラーの作成を始められますが、慣れてくるとスクリプトや Pascal Script で柔軟に拡張できます。徐々に自分のアプリに合わせたカスタマイズへ発展できればと思いました。