Delphi XE を Windows 10 / 11 にインストールする

# はじめに
**Delphi XE** は 2010 年に Embarcadero からリリースされました [^1]。

 - 純粋な Win32 開発環境としての Unicode Delphi 最終版
 - インストール時間が比較的短くて済む

上記理由により、現在でも VCL アプリケーションのマイグレーション用、あるいはマイグレーションの中間ステップ用として有用なバージョンです [^2]。

Embarcadero 製品のインストーラ及びアップデータは同社のサイト

 - [登録製品ポータル](https://my.embarcadero.com/)
 - [登録ユーザダウンロード](https://cc.embarcadero.com/myreg)

いずれかからダウンロードできます。しかしながら Delphi XE は古い製品という事もあり、[登録製品ポータル](https://my.embarcadero.com/)からだとダウンロードできないアイテムがあるようです。

本記事は、各種ファイルを[登録ユーザダウンロード](https://cc.embarcadero.com/myreg)からダウンロードして Windows 10 / 11 にインストールする手順となっています。


# ■ インストーラとアップデータとホットフィックス

## \#1 Delphi XE and C++Builder XE ISO
セットアップ DVD イメージファイル (ISO) です。完全インストーラと ESD インストーラもあります。Update1 が含まれています。

インストール先はデフォルトの `%ProgramFiles(x86)%\Embarcadero\RAD Studio\8.0\` ではなく、`C:\Embarcadero\Studio\8.0\` のような UAC の影響を受けない場所にインストールした方がトラブルは少ないと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/178387b7-0fff-211d-75e8-a7fdb7e9d27e.png)

 - [ID: 27984, Delphi XE and C++Builder XE ISO](http://cc.embarcadero.com/item/27984)
 - [ID: 28009, Delphi XE and C++Builder XE Complete Installer](http://cc.embarcadero.com/item/28009)
 - [ID: 27986, RAD Studio XE Install from the Web](http://cc.embarcadero.com/item/27986)
 - [Embarcadero Delphi XE および C++Builder XE のインストール ノート (EDN)](https://edn.embarcadero.com/article/40793)

Delphi XE のインストーラやアップデータは<font color="Crimson">管理者権限で実行する事をオススメ</font>します。

※ 環境によっては事前に `[Windows の機能の有効化または無効化]` にて .NET Framework 3.5 を有効にしなければならないかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c177e39f-ab3d-5636-119c-498352456a7f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f3e84b63-c6d6-a858-3489-4f7e7b5f3ecc.png)
`[Windows の機能の有効化または無効化]` は `[ファイル名を指定して実行 (〔Win〕+〔R〕)]` から `optionalfeatures.exe` を実行する事で素早く開く事ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f6e93983-73d2-fd77-9c78-e5376b231535.png)

### ・BMP のバッファオーバーフロー対策

バッファオーバーフロー対策を行います。`$(BDS)\source\Win32\vcl` にある `graphics.pas` を次のように改変します。

```pascal:graphics.pas
function PaletteFromDIBColorTable(DIBHandle: THandle; ColorTable: Pointer;
  ColorCount: Integer): HPalette;

  ...

  begin
    if ColorCount > 256 then                                // ADD
      InvalidGraphic({$IFNDEF CLR}@{$ENDIF}SInvalidBitmap); // ADD
    Pal.palNumEntries := ColorCount;
{$IF DEFINED(CLR)}
    if Length(ColorTable) > 0 then
      for I := 0 to ColorCount - 1 do
        Pal.palPalEntry[I] := ColorTable[I];
{$ELSE}
    Move(ColorTable^, Pal.palPalEntry, ColorCount * 4);
{$IFEND}
  end;

  ...
```


```pascal:graphics.pas
procedure TMetafile.ReadEMFStream(Stream: TStream);

...

begin
  NewImage;
  HeaderSize := SizeOf(TEnhMetaheader);
  SetLength(Buffer, HeaderSize);
  Stream.ReadBuffer(Buffer, HeaderSize);
  EnhHeader := TEnhMetaheader(BytesToStructure(Buffer, TypeOf(TEnhMetaheader)));
  if EnhHeader.dSignature <> ENHMETA_SIGNATURE then InvalidMetafile;
  if EnhHeader.nBytes < Sizeof(EnhHeader) then // Add
    InvalidMetafile;                           // Add
  SetLength(Buffer, EnhHeader.nBytes);

  ...
```


```pascal:graphics.pas
{$IF NOT DEFINED(CLR)}
procedure TBitmap.ReadDIB(Stream: TStream; ImageSize: LongWord; bmf: PBitmapFileHeader);

  ...

        // Read the color palette
        if biClrUsed = 0 then
          biClrUsed := GetDInColors(biBitCount);
        if (biClrUsed * DIBPalSizes[OS2Format]) > (256 * SizeOf(TRGBQuad)) then // ADD
          InvalidGraphic({$IFNDEF CLR}@{$ENDIF}SInvalidBitmap);                 // ADD
        Stream.ReadBuffer(ColorTable^, biClrUsed * DIBPalSizes[OS2Format]);
        Dec(ImageSize, biClrUsed * DIBPalSizes[OS2Format]);

  ...
```

改変した `graphics.pas` をプロジェクトフォルダにコピーして使ってください。

※ バッファオーバーフローの問題は Delphi XE4 以前で発生します。XE5 / XE6 / XE7 には修正パッチが配布されています。現在販売されている Delphi では問題解決済みです。

**See also:**

 - [Delphi および C++Builder における VCL Bitmap LoadFromFile の脆弱性について (Support Wiki)](https://docwiki.embarcadero.com/Support/ja/Delphi%E3%81%8A%E3%82%88%E3%81%B3C%2B%2BBuilder%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BVCL_Bitmap_LoadFromFile%E3%81%AE%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
 - [Delphi および C++ Builder の VCL ライブラリのバッファ オーバーフロー (SupportKB)](https://support.embarcadero.com/article/44089)

## \#2 Hotfix for Delphi XE, C++Builder XE and RAD Studio XE
Delphi XE Update 1 用のホットフィックスです。SKU 毎にアーカイブが分かれています。

| HotFix | Starter | Professional | Enterprise | Architect|
|:---|:---:|:---:|:---:|:---:|
| [ID: 28247, RAD Studio XE Hotfix for RAID 280864 (QC 88928)](https://cc.embarcadero.com/item/28247)  | × | 〇 | 〇 | 〇 |
|  [ID: 28248, RAD Studio XE Hotfix for RAID 280988 (QC 89242) ](https://cc.embarcadero.com/item/28248) | × | × | 〇 | 〇 |
|  [ID: 28249, RAD Studio XE Hotfix for RAID 280988 (QC 89242)](https://cc.embarcadero.com/item/28249) | × | 〇 | × | × |

アーカイブを解凍し、サブフォルダごと Delphi XE のインストールフォルダに上書きします。`system32` サブフォルダ内のファイルは次のフォルダに上書きします。

| Windows | パス |
|:---:|:---|
| 64bit | C:\Windows\SysWOW64 |
| 32bit | C:\Windows\System32 |

 - [ID: 28247, RAD Studio XE Hotfix for RAID 280864 (QC 88928)](https://cc.embarcadero.com/item/28247)
 - [ID: 28248, RAD Studio XE Hotfix for RAID 280988 (QC 89242) ](https://cc.embarcadero.com/item/28248)
 - [ID: 28249, RAD Studio XE Hotfix for RAID 280988 (QC 89242)](https://cc.embarcadero.com/item/28249)
 - [Delphi XE, C++Builder XE, RAD Studio XE 向け Hotfix (EDN)](https://edn.embarcadero.com/article/41313)


## \#3 Help Update 3 for Delphi XE and C++Builder XE
オンラインヘルプのアップデータです。

アーカイブを解凍するとインストーラ ( `Help_Setup.exe` ) がありますので、このファイルと同じフォルダに `setup.cmd` を作成します。

```bat:setup.cmd
@echo off
cls
Help_Setup /upgrade
```

`setup.cmd` を右クリックし、<font color="Crimson">\[管理者として実行\]</font> で開きます。

もちろん、管理者権限で開いたコマンドプロンプト (あるいは PowerShell) から `Help_Setup /upgrade` を行っても構いません。

 - [ID: 28256, Help Update 3 for Delphi XE and C++Builder XE](https://cc.embarcadero.com/item/28256)
 - [Readme - Help Update 3 for Delphi and C++Builder XE (DocWiki)](http://docwiki.embarcadero.com/RADStudio/XE/en/Readme_-_Help_Update_3_for_Delphi_and_C%2B%2BBuilder_XE)


## \#4 Hotfix 2 for Delphi XE, C++Builder XE and RAD Studio XE
Delphi XE Update 1 用のホットフィックス 2 です。SKU 毎にアーカイブが分かれています。

| HotFix | Starter | Professional | Enterprise | Architect|
|:---|:---:|:---:|:---:|:---:|
| [ID: 28257, RAD Studio XE Hotfix for QC 90864 (RAID 281617)](https://cc.embarcadero.com/item/28247)  | 〇 | × | × | × |
| [ID: 28258, RAD Studio XE Hotfix for QC 90864 (RAID 281617) ](https://cc.embarcadero.com/item/28248) | × | 〇 | × | × |
| [ID: 28259, RAD Studio XE Hotfix for QC 90864 (RAID 281617)](https://cc.embarcadero.com/item/28249) | × | × | 〇 | 〇 |

アーカイブを解凍し、サブフォルダごと Delphi XE のインストールフォルダに上書きします。

 - [ID: 28257, RAD Studio XE Hotfix for QC 90864 (RAID 281617)](https://cc.embarcadero.com/item/28247)
 - [ID: 28258, RAD Studio XE Hotfix for QC 90864 (RAID 281617) ](https://cc.embarcadero.com/item/28248)
 - [ID: 28259, RAD Studio XE Hotfix for QC 90864 (RAID 281617)](https://cc.embarcadero.com/item/28249)
 - [Delphi XE, C++Builder XE, RAD Studio XE 向け Hotfix (EDN)](https://edn.embarcadero.com/article/41313)


# ■ 追加コンポーネント
過去のバージョンで使っていたかもしれないコンポーネントを有効にする方法です。

## ・\[Samples\] カテゴリの VCL
インストール時に \[サンプルアプリケーション\] を選択しなかった場合、TGauge 等の一部のコンポーネントが利用できなくなります。

 1. スタートメニューから \[Embarcadero RAD Studio XE | 変更、修正、アンインストール\]
 2. インストーラのオプションで `[変更`] を選択
 3. インストールする項目で `サンプルアプリケーション` を選択。

上記手順で後からサンプルコンポーネントをインストールできます。

スタートメニューに `変更、修正、アンインストール` が見当たらない場合には `C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Embarcadero RAD Studio XE` を参照してみてください。

## ・TServerSocket / TClientSocket
古いバージョンでは **\[Internet\]** カテゴリにあったコンポーネントです。存在はしますが、デフォルトでは有効になっていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/2a5b1852-4d6c-1c00-699d-830f8da5dcad.png)
 1. \[コンポーネント | パッケージのインストール\]
 2. \[追加\]ボタンを押下。
 3. `$(BDS)\bin` [^3] にある `dclsockets150.bpl` を指定。

上記手順で TServerSocket / TClientSocket が有効になります。

## ・TShellTreeView / TShellComboBox / TShellListView / TShellChangeNotifier
古いバージョンでは **\[Samples\]** カテゴリにあったコンポーネントです。存在はしますが、デフォルトでは有効になっていません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/81446ac3-9b6d-4283-19c8-5fcd8327e646.png)
 1. \[ファイル | プロジェクトを開く\]
 2. `$(BDSCOMMONDIR)\Samples\Delphi\VCL\ShellControls` [^4] にある `dclshlctrls.dpk` を指定。
 3. \[プロジェクトマネージャ\] で `dclshlctrls140.bpl` を右クリックし、コンテキストメニューから \[インストール\]。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/673cd1ea-b01c-6c27-9b1d-ec0f76b60155.png)
上記手順で TShellTreeView / TShellComboBox / TShellListView / TShellChangeNotifier が有効になります。


# ■ その他のダウンロード可能ファイル
その他、Delphi XE で有用なファイル群です。

## ・Embarcadero RAD Studio XE Partner DVD ISO
パートナー DVD です。無償で使えるサードパーティ製コンポーネント等が含まれています。

**TMS Smooth Controls pack** も含まれていますが、この後のバージョン以降含まれておらず、Windows 10 / 11 で実行すると GDI+ のエラーが出る事があります。

 - [ID: 28074, Embarcadero RAD Studio XE Partner DVD ISO](http://cc.embarcadero.com/item/28074)
 - [TMS Smooth Controls pack (TMS Software)](https://www.tmssoftware.com/site/advsmoothcontrols.asp)

## ・BDE Merge Module for RAD Studio 2007-XE2
BDE マージモジュールです。アプリケーションと共に BDE を配布するインストーラを作る際に使います。

 - [ID: 24996, BDE Merge Module for RAD Studio 2007-XE2](http://cc.embarcadero.com/item/24996)
 - [今更ながら BDE (Borland Database Engine) (ht-deko.com)](https://ht-deko.com/tech024.html)

## ・Indy (Internet Direct)
**Indy** に関しては別記事があります。

 - [Unicode 版 Delphi (2009 以降) に最新版の Indy10 をインストールする (ht-deko.com)](https://ht-deko.com/tech033.html)

## ・IntraWeb (VCL for the Web)
**IntraWeb** に関しては別記事があります。

 - [Delphi に最新版の IntraWeb (VCL for the Web) をインストールする (Qiita)](https://qiita.com/ht_deko/items/e75d56487ff2395103a5)

## ・IP*Works for Delphi XE
Delphi XE 用の **IP*Works** です。

 - [ID: 28012, IP*Works for Delphi XE](https://cc.embarcadero.com/item/28012)

## ・DB Optimizer XE IDE Plug-in for Delphi XE and C++Builder XE
Delphi XE 用の **DB Optimizer XE** です。

 - [ID: 28043, DB Optimizer XE IDE Plug-in for Delphi XE and C++Builder XE](https://cc.embarcadero.com/item/28043)

## ・FinalBuilder for Delphi, C++Builder and RAD Studio XE
Delphi XE 用の **FinalBuilder** です。

 - [ID: 28278, FinalBuilder for Delphi, C++Builder and RAD Studio XE](https://cc.embarcadero.com/item/28278)

## ・FireDAC 8.0.5
FireDAC が使える後続のバージョンを持っている場合、FireDAC をインストールする事が可能かもしれません。XE4 の FireDAC アドオンパックが利用可能な場合、XE4 ～ Delphi 5 の IDE にインストール可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c381a109-0d24-9931-4a45-a849df8abe05.png)
別記事に詳細があります。

 - [旧バージョンの Delphi に FireDAC をインストールするには？ (Qiita)](https://qiita.com/ht_deko/items/ab472231ec6a8681991a)

# おわりに
使う頻度がそこそこ高い Delphi XE の環境構築方法でした。実行の際には管理者権限があった方がいいような気がします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/35b6133f-4419-ea4a-2cea-8243d12e176a.png)
Delphi の最新バージョンでは、旧バージョンライセンスを使用することができます。「ソースコードはあるけどコンパイル環境がない！」という場合には同グレードの最新版 Delphi を購入するといいですよ。

**See also:**

 - [Delphi 旧バージョン情報 (Embarcadero)](https://www.embarcadero.com/jp/products/delphi/previous-versions)
 - [Supported Versions (Support Wiki)](https://docwiki.embarcadero.com/Support/en/Supported_Versions)
 - [Platform Status (Support Wiki)](https://docwiki.embarcadero.com/PlatformStatus/en/Main_Page)
 - [Delphi コードのクリーンアップ (Qiita)](https://qiita.com/ht_deko/items/9cc54ba5802f034c58a6)
 - [Delphi/C++Builder XE の手動アンインストール (SupportKB)](https://support.embarcadero.com/article/43030)
 - [Delphi 7 (7.1) を Windows 10 / 11 にインストールする](https://qiita.com/ht_deko/items/a815f81c83068ba2fb7c)
 - [Delphi 2007 (R2) for Win32 を Windows 10 / 11 にインストールする](https://qiita.com/ht_deko/items/95c95a0ca97551f0adb4)
 - [「MS Help 2.x ランタイムがインストールされていない」というエラーを解消する](https://qiita.com/ht_deko/items/be1fb0aa801abbcdaa5c)

[^1]: Starter Edition は 2011 年です。
[^2]: 残念ながら 32bit コンパイラのみなので、64bit コンパイラが必要な場合には最新版の使用をおすすめします。
[^3]: `$(BDS)` は Delphi インストールフォルダを表します。\[ツール | オプション...\] の \[環境変数\] で実際のパスを確認する事ができます。
[^4]: `$(BDSCOMMONDIR)` は標準で `C:\Users\Public\Documents\RAD Studio\8.0` です。\[ツール | オプション...\] の \[環境変数\] で実際のパスを確認する事ができます。