Delphi/400 11 Alexandriaがリリースされた当初、
『11 Alexandriaで作成したモジュールはXP以前で起動できない』
というアナウンスをテクニカルセミナーやレポートで実施していました。
これはPEヘッダーといって、
WindowsのPE(ポータブル実行可能ファイル)のバージョンの初期値が
11 Alexandriaでは5.0から6.0に上がったことに伴うものでした。
しかしDelphiではPEヘッダーのバージョンを変更可能となっており、
要件に応じてWindows 2000やXPでも起動可能なモジュールを
作成することは可能です。今回はその手順を紹介します。
=======================================
【免責事項】
本ページに掲載している手順で実行ファイルの起動時チェックは通るようになりますが、
PEヘッダーの変更によって古いWindowsでの動作がサポートされるわけではありません。
あらかじめご了承下さい。
=======================================
設定方法
前置きが長くなりましたが、
プロジェクトオプションの以下の設定を変更します。
[ビルド] → [Delphi コンパイラ] → [リンク] の順に遷移し、
- PE ヘッダーの OS Version フィールドに<メジャー>.<マイナー>を設定
- PE ヘッダーの Subsystem Version フィールドに<メジャー>.<マイナー>を設定
という2つの項目の初期値が『6.0』になっている所を
『5.0』に設定することで、Windows 2000やXPでもモジュールが起動可能になります。
※ Delphi 10.2 Tokyoにおいては、この設定値は『5.0』が初期値になっていました。
※ 逆により新しいOSでのみ起動可能に設定することも可能です。
Windows 7でも起動禁止させたい場合は、この箇所を『6.2』に設定します。
※ 「デバッグ情報」をFalseにしてEXEのファイルサイズを軽くする件についてはこちらのTipsを参照。
<実行イメージ>
PEヘッダーのバージョンが足りないと起動時にエラーになる
PEヘッダーのバージョンを下げると起動可能!
(※起動時チェックは通りますが、XPでの動作がサポートされるわけではありません。)