タイトル: エラー: disk spanning must be enabled in order to create an installation
SEOタイトル: Inno Setup「disk spanning must be enabled」エラーの原因と対処
| この記事の要点 |
|
エラー内容
Compiler error:
Internal error: disk spanning must be enabled in order to create an installation
that does not fit on a single disk.
(または)
Error on line N in C:\setup\setup.iss: Internal error:
The compiler has detected that the installer would exceed 2 GB in size.
Disk spanning must be enabled.
Inno Setup はインストーラ作成ツールとして広く使われていますが、単一の .exe ファイルとしての上限は約 2GBです。出力サイズがこれを超えると、上記コンパイラエラーで停止します。
原因
| 原因 | 確認 |
|---|---|
| 圧縮後の合計が 2GB 超 | [Files] セクションのファイル合計サイズを確認 |
DiskSpanning が無効 | DiskSpanning ディレクティブの値 |
SolidCompression=yes との衝突 | SolidCompression は分割と相性が悪い |
| 圧縮設定が緩い | Compression=zip のような旧形式 |
| 巨大なメディアファイル | 動画 / 音声 / 画像が大量に含まれる |
対処1: DiskSpanning を有効化
インストーラを複数の .bin ファイルに分割する設定です:
; setup.iss
[Setup]
AppName=MyApp
AppVersion=1.0
DefaultDirName={pf}\MyApp
OutputDir=C:\setup\output
OutputBaseFilename=MyAppInstaller
; 分割を有効化
DiskSpanning=yes
; 1 ディスクのサイズ (バイト)。デフォルトは CD サイズ (約 650MB)
DiskSliceSize=2000000000 ; 約 2GB ずつに分割
; ダミーファイルを 0 にしておく
DiskClusterSize=512
; 圧縮設定
Compression=lzma2/ultra64
SolidCompression=no ; ★ 分割時は no 推奨
これで以下のような複数ファイルが出力されます:
MyAppInstaller.exe ← メインインストーラ (起動側)
MyAppInstaller-1.bin ← データファイル 1
MyAppInstaller-2.bin ← データファイル 2
MyAppInstaller-3.bin ← データファイル 3
配布時は全ファイルを同一フォルダに置く必要があります。
対処2: SolidCompression を無効化
SolidCompression は全ファイルを 1 つの塊として圧縮する設定で、圧縮率は高くなりますが分割と相性が悪く、上記エラーを引き起こすことがあります:
[Setup]
Compression=lzma2/max
SolidCompression=no ; ★ 個別圧縮にする
対処3: 圧縮アルゴリズムを強化
圧縮率を上げて 2GB 以下に収めるアプローチも有効です:
| 圧縮設定 | 圧縮率 | 展開速度 |
|---|---|---|
Compression=zip/9 | 低 | 高速 |
Compression=bzip/9 | 中 | 中速 |
Compression=lzma2/normal | 高 | 中速 |
Compression=lzma2/ultra64 | ★最大 | 低速 |
[Setup]
Compression=lzma2/ultra64
LZMAUseSeparateProcess=yes ; 別プロセス圧縮で速度改善
LZMANumBlockThreads=4 ; マルチスレッド圧縮
対処4: 大容量データを別途配布
動画・サンプルデータなど 1GB を超えるリソースはインストーラに同梱せず、初回起動時にダウンロードする設計にするのがモダンな手法です:
[Setup]
; 軽量インストーラ
Compression=lzma2/max
SolidCompression=yes
[Files]
Source: "bin\app.exe"; DestDir: "{app}"
Source: "bin\app.dll"; DestDir: "{app}"
; リソースファイルは含めない
[Run]
; インストール後にダウンローダを起動
Filename: "{app}\app.exe"; Parameters: "/download-resources"; \
Description: "リソースをダウンロード"; Flags: postinstall
対処5: 別のインストーラに乗り換える
| ツール | 特徴 | サイズ上限 |
|---|---|---|
| Inno Setup | 軽量、スクリプト言語シンプル | ~2GB / DiskSpanning で分割可 |
| NSIS | 軽量、ZIP ベース | 実質無制限 (32bit/64bit) |
| WiX Toolset | MSI 形式、業務向け | 制限ほぼ無し |
| Advanced Installer | 商用、GUI 操作 | 大規模 OK、有料 |
| InstallShield | 商用大規模向け、エンタープライズ | 大規模 OK |
事前のサイズ見積もり
# PowerShell で配布ファイルの合計サイズ確認
$path = "C:\setup\files"
$size = (Get-ChildItem -Path $path -Recurse | Measure-Object -Property Length -Sum).Sum
"{0:N2} MB" -f ($size / 1MB)
"{0:N2} GB" -f ($size / 1GB)
# 圧縮後のおおよその予測 (LZMA2 で 30-60% 程度)
"圧縮後予測: {0:N2} MB" -f ($size * 0.5 / 1MB)
DiskSpanning 利用時の注意
- 配布時は全 .bin ファイルが必要 — メイン .exe だけでは動かない
- ZIP でまとめて配布するなら、ユーザに「全部解凍してから起動」と注意書きを
- Web ダウンロードリンクは 1 ファイルにまとめる (圧縮 ZIP or自前ダウンローダ)
- USB メモリ配布なら 4GB FAT32 制限に注意
- DVD-R 配布なら DiskSliceSize=4700000000 (4.7GB) も検討
FAQ
Q: DiskSliceSize はどう決める?
A: 配布媒体に合わせます。CD なら 650000000、USB FAT32 なら 4000000000 (4GB)、DVD なら 4700000000。Web 配布なら 2GB 程度が一般的。
Q: DiskSpanning=yes にすると圧縮率が下がる?
A: 通常 SolidCompression と併用できないため、固体圧縮よりは圧縮率が落ちます。LZMA2/ultra で個別圧縮を強化してください。
Q: 2GB 制限はなぜ存在する?
A: Inno Setup の内部実装が 32bit 符号付き整数でファイルオフセットを管理しているため。完全な解決には WiX や NSIS など別ツールへの移行が必要です。