タイトル: Inno Setup(Windows インストーラ作成ツール)の概要と使い方
SEOタイトル: Inno Setup 入門(ISL スクリプト・セクション構造・Pascal Script・署名・NSIS との比較)
| この記事の要点 |
|
Inno Setup とは
Inno Setup は Jordan Russell 氏が開発する Windows 用インストーラ作成ツールで、無料(modified BSD ライセンス)で商用利用可能です。1997 年から続く老舗で、多くのフリーソフトや業務アプリケーションのインストーラとして採用されています。
主な特徴
- 軽量・高速。生成された Setup.exe は依存ランタイム不要で単体配布可能
- Windows 7 SP1 以降の全 Windows に対応(Inno Setup 6 系)
- 多言語対応(標準で 30 以上の言語パック)
- カスタムページ・条件分岐・前提チェックを Pascal Script で記述可能
- デジタル署名(Authenticode)と Windows SmartScreen に対応
- サイレントインストール、コマンドライン引数、Update インストール対応
ダウンロードとインストール
- jrsoftware.org/isinfo.php から最新版をダウンロード
- Inno Setup 本体と Inno Setup QuickStart Pack(IDE 同梱)の 2 種類あり。後者推奨
- インストーラを実行 → Inno Setup Compiler が起動
最小スクリプト例
; setup.iss — 最小限の構成
[Setup]
AppName=My Application
AppVersion=1.0.0
AppPublisher=My Company Inc.
DefaultDirName={autopf}\MyApp
DefaultGroupName=My Application
OutputBaseFilename=MyApp-Setup-1.0.0
Compression=lzma2
SolidCompression=yes
WizardStyle=modern
[Files]
Source: "build\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "build\*.dll"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
Source: "README.md"; DestDir: "{app}"; Flags: ignoreversion isreadme
[Icons]
Name: "{group}\My Application"; Filename: "{app}\MyApp.exe"
Name: "{commondesktop}\My Application"; Filename: "{app}\MyApp.exe"; Tasks: desktopicon
[Tasks]
Name: "desktopicon"; Description: "デスクトップにショートカット作成"; GroupDescription: "追加タスク:"
[Run]
Filename: "{app}\MyApp.exe"; Description: "今すぐ起動"; Flags: nowait postinstall skipifsilent
これを setup.iss として保存し、Inno Setup Compiler で「Compile」すると Output/MyApp-Setup-1.0.0.exe が出来上がります。
主要セクション
| セクション | 役割 |
|---|---|
[Setup] | インストーラ全体の設定。アプリ名、バージョン、既定インストール先など |
[Files] | インストールするファイル一覧 |
[Dirs] | 作成するディレクトリ |
[Icons] | スタートメニュー・デスクトップショートカット |
[Tasks] | ユーザに選択させるタスク(チェックボックス) |
[Components] | コンポーネント選択(カスタムインストール用) |
[Registry] | レジストリ書き込み |
[Run] | インストール直後に実行するコマンド |
[UninstallRun] | アンインストール時に実行 |
[Code] | Pascal Script でロジック記述 |
[Languages] | 表示言語の追加 |
定数(Constants)
パスやレジストリ位置を表す定数が用意されています。クロスバージョン対応で必須です。
| 定数 | 意味 |
|---|---|
| {app} | インストール先(DefaultDirName で指定) |
| {autopf} | Program Files(32/64bit 自動判別) |
| {commondesktop} | 全ユーザ デスクトップ |
| {userdesktop} | 現ユーザ デスクトップ |
| {group} | スタートメニューのフォルダ |
| {tmp} | 一時ディレクトリ |
| {src} | セットアップが置かれているディレクトリ |
| {sys} | System32 / SysWOW64 |
| {commonappdata} | ProgramData |
| {userappdata} | AppData\Roaming |
Pascal Script([Code] セクション)
条件分岐や前提チェックは Pascal Script で書きます。コンパイル時とランタイムの両方の関数を呼び出せます。
[Code]
function InitializeSetup(): Boolean;
var
Version: Cardinal;
begin
Result := True;
// .NET 6 ランタイムが必要なら確認
if not RegQueryDWordValue(HKLM, 'SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost', 'Version', Version) then
begin
MsgBox('.NET 6 Runtime が必要です。インストールしてから再度実行してください。',
mbError, MB_OK);
Result := False;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
// インストール後の設定ファイル展開など
SaveStringToFile(ExpandConstant('{app}\config.ini'),
'[Settings]' + #13#10 + 'Version=1.0', False);
end;
end;
サイレントインストール / コマンドライン引数
# 完全サイレント(GUI 一切なし)
MyApp-Setup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART
# 進捗のみ表示
MyApp-Setup.exe /SILENT
# インストール先を指定
MyApp-Setup.exe /DIR="C:\Apps\MyApp"
# 特定タスクのみ実行
MyApp-Setup.exe /TASKS="desktopicon"
# ログを出力
MyApp-Setup.exe /LOG="install.log"
# アンインストール
"C:\Program Files\MyApp\unins000.exe" /SILENT
デジタル署名と SmartScreen 対策
未署名インストーラは Windows SmartScreen が「不明な発行元」として警告します。署名すれば警告が緩和(EV 証明書ならゼロ)になります。
[Setup]
SignTool=signtool sign /f "cert.pfx" /p "password" /tr http://timestamp.digicert.com /td sha256 /fd sha256 $f
SignedUninstaller=yes
# 実行時に Setup.exe / Uninstaller の両方が署名される
署名はコードサイニング証明書(DigiCert / Sectigo / SSL.com など)を購入する必要があります。OSS なら SignPath などの無料サービスもあります。
UAC(管理者権限)
- PrivilegesRequired: admin(既定)/ poweruser / lowest
- admin 必須ならスタート時に UAC ダイアログが表示される
- 非管理者でもインストールしたい場合は
PrivilegesRequiredOverridesAllowed=dialogを併用
カスタムページの追加
ライセンス・情報ページ以外にも、シリアル入力やサーバ URL 設定など独自のページを Pascal Script で追加できます。
[Code]
var
ServerPage: TInputQueryWizardPage;
procedure InitializeWizard();
begin
ServerPage := CreateInputQueryPage(wpWelcome,
'サーバ設定', '接続先サーバを入力してください',
'インストール後の動作に使用します。');
ServerPage.Add('サーバ URL:', False);
ServerPage.Values[0] := 'https://api.example.com';
end;
競合ツールとの比較
| ツール | 特徴 |
|---|---|
| Inno Setup | 無料・OSS、ISL スクリプト、Pascal で拡張、軽量 |
| NSIS (Nullsoft Scriptable Install System) | 無料・OSS、独自スクリプト、より柔軟だが学習コスト高 |
| WiX Toolset | 無料・OSS、XML で記述、MSI 生成、エンタープライズ向け |
| InstallShield | 商用、UI 重視、企業導入 |
| Advanced Installer | 商用、GUI 編集、MSIX / EXE 両対応 |
| MSIX / msix-packaging-tool | Microsoft 標準、Store 配布向け |
Inno Setup を選ぶ理由
- 無料でありながら商用利用可
- 軽量・高速で依存ランタイム不要
- 少ない記述量で美しいインストーラが作れる
- OSS でカスタマイズの自由度が高い
- 長年のコミュニティ蓄積による豊富なサンプル
FAQ
Q: MSI を作りたい
A: Inno Setup は EXE 形式のみ。MSI なら WiX Toolset / Advanced Installer を使ってください。
Q: アップデート時に古い設定ファイルを残したい
A: [Files] セクションで Flags: onlyifdoesntexist を付けると既存ファイルは上書きしません。
Q: 64bit アプリ用の Inno Setup スクリプト
A: [Setup] に ArchitecturesAllowed=x64 arm64 と ArchitecturesInstallIn64BitMode=x64 arm64 を追加。{autopf} 等の定数が自動で 64bit パスを返します。