Delphi 2 ～ 3.1 は 32bit アプリケーションだけどインストーラが 16bit アプリケーションなせいで 64bit Windows へインストールできない件をどうにかする

# はじめに

Delphi 2 ～ 3.1 のインストーラは **Install Shield 3** で作られており、16bit アプリケーションです。

つまり、Delphi 2 ～ 3.1 そのものは 32bit アプリケーションであるにもかかわらず、インストーラの制限によって 64bit Windows へはインストールできません。

# 対処方法

## ■ 32bit Windows へインストールして持ってくる

VM 等の 32bit Windows へ一旦インストールし、ファイルを 64bit Windows へ持ってくる方法です。OS の種類によってはインストールの際に **NTVDM** が別途インストールされるかもしれません。

NTVDM は `[Windows の機能の有効化または無効化]` から手動でインストールする事もできます。
`[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)
`NTVDM` は `レガシ コンポーネント` の中にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/e7291344-9c96-c84a-e424-38fc0e618339.png)
レジストリも収集する必要がありますが、32bit Windows のレジストリをそのまま 64bit Windows に持ってきても動作しないかもしれません。

**See also:**

 - [仮想 DOS マシン (Wikipedia)](https://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3DOS%E3%83%9E%E3%82%B7%E3%83%B3)


## ■ RUNIMAGE を使う

CD-ROM 内の `RUNIMAGE` にはセットアップされた状態のファイルが格納されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/7c2ef17a-c3ed-679d-529e-81dcd1d3f688.png)
レジストリについては自前で処理しなければなりません。

## ■ Is3Engine.zip を使う

インストーラが **Install Shield 3** の場合には回避方法があるようです。
以下のサイトから `Is3Engine.zip` をダウンロードしてきます。

 - [Installing 32-bit programs with 16-bit setup launcher stubs (ReactOS Forum)](https://reactos.org/forum/viewtopic.php?f=22&t=10988)
 - [Is3Engine.zip への直接リンク (toastytech.com)](https://toastytech.com/files/Is3Engine.zip)

:::note info 
うまく DL できない場合には、Is3Engine.zip の URL をブラウザのアドレスバーに直接入力してみてください。
:::


これを解凍してできた `setup32.exe` をセットアップ CD-ROM 内の `INSTALL` フォルダに置いて実行します (`SETUP.EXE` と `setup32.exe` を同じ場所に置いて実行)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/ad88a792-81fc-a561-1ce0-c3bbc3a7f11f.png)

:::note info
もちろんセットアップ CD-ROM に書き込む事はできないので、ローカルにコピーするなり、再度 CD-R に焼くなりします。
:::

`setup32.exe` を実行してしばらくするとインストーラが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/7e18a3e9-189b-75e5-b34a-244333597245.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/3835a045-2543-0441-9915-5538820358a1.png)
Windows 10 (64bit) でインストーラを実行できました。

## ■ Is3Engine.zip を使う (検証)

続いて、Windows 11 の **Windows Sandbox** を使ってインストールを検証してみました。

### ・Delphi 2
そのままだと `OC30.DLL` のエラーでインストールが完了しませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/d9598699-3d71-a0ce-e9fb-c37f81406014.png)
`setup32.exe` のショートカットを作り [互換性] タブで `Windows 98 / Windows Me` に変更し、このショートカットを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/797b5e18-39f6-1546-004f-455b66d828c3.png)
BDE が設定できなかった旨のエラーは出ましたが、インストーラは完走しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/77ede3a5-bf8f-fc6c-1b7a-f0c1c5dba59b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/d28a9a82-bdee-3c99-c4a9-06b8d43d29ee.png)
※ Delphi 2 の BDE はバージョン 3.0 です。多くの場合、付属の BDE が正しくインストールできなくても問題ない気がします [^1]。

### ・Delphi 3

そのままだと最後に `MFC40.DLL` / `OC30.DLL` のエラーが出てしまいます (インストーラは完走します)[^2]。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/dc4ffde4-deaa-7d2a-437f-fb14fe7a7199.png)
`setup32.exe` のショートカットを作り [互換性] タブで `Windows 98 / Windows Me` に変更し、このショートカットを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/797b5e18-39f6-1546-004f-455b66d828c3.png)
BDE が設定できなかった旨のエラーは出ましたが、インストーラは完走しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/77ede3a5-bf8f-fc6c-1b7a-f0c1c5dba59b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/267822cd-4d9f-f699-4e81-474f2210c496.png)
※ Delphi 3 の BDE はバージョン 4.0、Delphi 3.1 の BDE はバージョン 4.1 です。多くの場合、付属の BDE が正しくインストールできなくても問題ない気がします [^1]。

# おわりに

インストーラ全般の話になりますが、インストーラが 16bit アプリケーションの場合には、ファイルのプロパティの [詳細] タブを確認してみましょう。**Install Shield 3** で作られていればチャンスはあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/ee085e9a-9b59-fdec-581e-05267d6768ff.png)
インストールされたアプリケーションが 16bit アプリケーションであった場合には **OTVDM** を使えば動作するかもしれません。

**See also:**

 - [Delphi 1.0 Client/Server が無償公開されたので Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/a65e0950b906d28ccb5f)
 - [Windows 10 用 WinHlp32.exe インストールバッチファイル (DoldoWorkz)](https://moondoldo.com/DoldoWorkz/?Windows10%E7%94%A8WinHlp32.exe%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)
 - [旧 Delphi FAQ (EDN)](https://support.embarcadero.com/jp/article/37438)
 - [04_64 ビット版 Windows 10 に Delphi 4 / Delphi 5 をインストール (Mr.XRAY)](http://mrxray.on.coocan.jp/Delphi/Others/Windows10_Delphi7.htm#04)
 - [05_32 ビット Windows 10 に Delphi 4 / Delphi 5 をインストール (Mr.XRAY)](http://mrxray.on.coocan.jp/Delphi/Others/Windows10_Delphi7.htm#05)
 - [BDE, SQL Link サポート状況 (SupprtKB)](https://support.embarcadero.com/jp/article/36002)

[^1]: BDE (Borland Database Engine) の最新版は Delphi 6 以降にバンドルされた `バージョン 5.2` です。BDE は同時に異なるバージョンをインストールして使用することができません。インストール時に異なるディレクトリを指定したとしても、BDE の構造上古いバージョンと共存することはできず、必ず最後にインストールされたバージョンが使われます。
[^2]: 事前にインストール CD-ROM 内の `RUNIMAGE\WINDOWS\SYSTEM32` にある `MFC40.DLL` と `OC30.DLL` を `C:\Windows\System32` および `C:\Windows\SysWow64` へコピーしてインストーラを実行すれば最後までエラーは出ませんでした。