Inno SetupでWindowsコンソールアプリを一貫性を持って配布する方法
Inno SetupでWindowsコンソールアプリを一貫性を持って配布する方法
はじめに
Windows向けの社内ツールやバッチアプリを配布する場合、単純な「フォルダコピー渡し」では環境ごとにバラつきが出ます。
Inno Setup を使ってインストーラ化 することで、配置先・設定・自動実行の登録/削除までを一貫した形で提供できます。
注意事項
本記事は筆者の個人的な検証および見解に基づいて執筆したものです。
記載内容の正確性を保証するものではなく、ご利用にあたっては必ず最新の公式ドキュメントやライセンス情報をご確認ください。
ライセンスについて
公式サイト では 2025/08/31 時点で以下のように記載されています。
-
非商用利用
"We're not requesting that non-commercial users purchase licenses - but they may still do so if they wish!"
→ 非商用利用ではライセンス購入は必須ではなく、寄付や任意の購入が歓迎されています。 -
商用利用
"Using Inno Setup commercially? Please purchase a license."
→ 直訳すると「商用利用していますか?ライセンスを購入してください」となり、従来より強い表現に変更されています。
→ また、バージョン 6.5 以降で「commercial licenses(商用ライセンス)」が導入された ことが公式に明記されています。
→ 現時点では「必須」と明言はされていませんが、将来的に有償化されている可能性があります。
※本記事は 2025/08/31 時点の公式サイト記載を引用したものです。
商用利用については、必ず公式サイトで最新のライセンス状況をご確認ください。
Inno Setup のインストール方法
Inno Setup は以下の2通りの方法で入手できます。
-
公式サイトから直接ダウンロード
-
winget を利用する(最近の環境におすすめ)
winget install --id JRSoftware.InnoSetup
- インストール後は GUI の Inno Setup Compiler(Compil32.exe)または
iscc
コマンドでスクリプトをビルドできます
一般的な作業手順(GUI)
Inno Setup Compiler の画面では、基本的に以下の 3 ステップで作業します。
-
① スクリプトを修正して保存
-
.iss
を編集し、変更後は上書き保存します(アイコン①)。 - 例:アプリ名、バージョン、出力ファイル名、配置先、タスク名など。
-
-
② スクリプトをコンパイルして結果を確認
- コンパイル(アイコン②)を実行。
- 画面下部の Compiler Output にエラーが出たら修正して再コンパイル。
- エラーがなく完了すれば インストーラ(.exe) が生成されます。
- 既定では、
.iss
のOutputBaseFilename
と同じ名前で、スクリプトと同階層のOutput
フォルダ に出力されます。
- 既定では、
-
③ 作成したインストーラを実行
- 実行テスト(アイコン③)でセットアップを起動できます。
- ここでインストール時の不具合(権限やファイル欠落、パス誤りなど)を確認できることがあります。
- 実機テストでは 管理者権限 での実行を推奨します(タスク登録・サービス操作がある場合は特に)。
サンプル Inno Setup スクリプト(抜粋)
ConsistRunner 用の .iss
を一般化した例です。必要に応じて置換してください。
; アプリ名やバージョンは #define で管理
#define MyAppName "ConsistRunner"
#define MyAppVersion "1.0.0"
#define MyAppExeName "ConsistRunner.exe"
[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup_{#MyAppName}
[Files]
; アプリ本体
Source: "bin\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
; Config (App.Release.config を変換したものを配置)
Source: "App.Release.config"; DestDir: "{app}"; DestName: "ConsistRunner.exe.config"; Flags: ignoreversion
; タスクスケジューラのXMLテンプレート(UTF-16 BOM)
Source: "ConsistRunner_Hourly.xml"; DestDir: "{app}"; Flags: ignoreversion
[Run]
; タスクスケジューラへの登録(管理者権限が必要)
Filename: "schtasks"; Parameters: "/Create /TN ""ConsistRunnerHourly"" /XML ""{app}\ConsistRunner_Hourly.xml"" /F"; StatusMsg: "Registering scheduled task..."; Flags: runhidden
[UninstallRun]
; アンインストール時にタスク削除
Filename: "schtasks"; Parameters: "/Delete /TN ""ConsistRunnerHourly"" /F"; StatusMsg: "Removing scheduled task..."; Flags: runhidden
セクションごとの役割(筆者の見解)
Inno Setup のスクリプトは大きくセクションごとに役割が分かれています。
ここでは今回のサンプルで利用している主要なセクションについて、個人的な見解を添えて整理します。
-
[Setup] インストーラの設定
- アプリ名、バージョン、インストール先フォルダ、出力されるインストーラのファイル名などを定義します。
- ここで定義しておけば、配布するインストーラの基本情報がすべて統一されます。
-
[Files] インストーラに含むファイル
- 実際に配布する実行ファイル、DLL、Config、XML などを列挙します。
- 「どのファイルを、どのフォルダに配置するか」をここで指定します。
- インストーラの成否は結局このセクション次第なので、丁寧に書くのが肝心です。
-
[Run] インストール時の実行コマンド
- インストール完了後に自動で実行する処理を定義します。
- 今回のサンプルでは
schtasks /Create
を呼び出し、タスクスケジューラ登録を自動化しています。 - 実際にはレジストリ設定やサービス登録など、環境に応じた追加処理を入れることも可能です。
-
[UninstallRun] アンインストール時の実行コマンド
- アンインストール処理の最後に実行するコマンドを定義します。
- サンプルでは
schtasks /Delete
を実行し、登録したタスクを削除します。 - 「インストーラで入れたものは、アンインストーラで確実に消す」設計にすることで、利用者に安心感を与えられます。
ポイント解説
1. 配置場所を統一
-
DefaultDirName={pf}\{#MyAppName}
で標準的に Program Files 配下 へ。 - 環境ごとに配置がばらけず、サポートしやすくなります。
2. App.Release.config の置換
- リリース時のログ出力先などは
App.Release.config
にプレースホルダを置き、InnoReplacer で差し替え。 - InnoReplacer は筆者が作成した自作ツールであり、Inno Setup 公式の付属機能ではありません。
- 文字コード変換の影響(後述)を避けつつ、安全に設定を流し込めます。
3. タスクスケジューラの登録/削除
-
[Run]
でschtasks /Create /XML
を実行し 自動実行タスクを登録。 -
[UninstallRun]
で 削除 まで自動化でき、環境をクリーンに戻せる のが利点。
4. 文字コードの注意点
- 2025/08 時点の最新版(6.5.0)を用いた検証 では、Inno Setup が内部で文字列を Shift-JIS に変換していると考えられ、文字化けリスクがあると判断しています。
- タスクXMLは UTF-16 BOM で用意し、必要な文字列置換は InnoReplacer(UTF-8/UTF-16 BOM対応、自作ツール)で行う方針が安全です。
- ※InnoReplacer は筆者が作成した自作ツールであり、Inno Setup 公式の付属機能ではありません。
- 同等の機能を持つツールであれば代替可能です。
まとめ
- Inno Setup は 6.5 以降で商用ライセンスが導入され、表現が強化されている
- 非商用は購入不要だが、寄付歓迎
- 商用は「購入してください」という表記に変更され、将来的に必須化される可能性がある
- ご利用前には必ず公式サイトを確認すること
- winget または公式サイトから導入可能
- GUI は ①修正保存 → ②コンパイル → ③実行テスト の流れで簡単に利用できる
- Config は
App.Release.config
+ InnoReplacer(自作ツール)、タスクは UTF-16 BOM の XML +schtasks
が実戦的- ※InnoReplacer は自作ツールのため、同様のツールで代替可能
- 配布からアンインストールまでを一貫性を持って行えるため、顧客環境でも安心して使える
👉 併せて読む:
Discussion