# Delphi 2 ~ 3.1 は 32bit アプリケーションだけどインストーラが 16bit アプリケーションなせいで 64bit Windows へインストールできない件をどうにかする --- tags: Windows Delphi programming embarcadero objectpascal created_at: 2021-10-29 updated_at: 2021-10-30 --- # はじめに 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](./images/f6e93983-73d2-fd77-9c78-e5376b231535.png) `NTVDM` は `レガシ コンポーネント` の中にあります。 ![image.png](./images/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](./images/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) これを解凍してできた `setup32.exe` をセットアップ CD-ROM 内の `INSTALL` フォルダに置いて実行します (`SETUP.EXE` と `setup32.exe` を同じ場所に置いて実行)。 ![image.png](./images/ad88a792-81fc-a561-1ce0-c3bbc3a7f11f.png) :::note info もちろんセットアップ CD-ROM に書き込む事はできないので、ローカルにコピーするなり、再度 CD-R に焼くなりします。 ::: `setup32.exe` を実行してしばらくするとインストーラが起動します。 ![image.png](./images/7e18a3e9-189b-75e5-b34a-244333597245.png) ![image.png](./images/3835a045-2543-0441-9915-5538820358a1.png) ## ・Is3Engine.zip を使う (検証) Windows 11 の **Windows Sandbox** を使って検証してみました。 ### □ Delphi 2 そのままだと `OC30.DLL` のエラーでインストールが完了しませんでした。 ![image.png](./images/d9598699-3d71-a0ce-e9fb-c37f81406014.png) `setup32.exe` のショートカットを作り [互換性] タブで `Windows 98/Windows Me` に変更し、このショートカットを実行します。 ![image.png](./images/797b5e18-39f6-1546-004f-455b66d828c3.png) BDE が設定できなかった旨のエラーは出ましたが、インストーラは完走しました。 ![image.png](./images/77ede3a5-bf8f-fc6c-1b7a-f0c1c5dba59b.png) ![image.png](./images/d28a9a82-bdee-3c99-c4a9-06b8d43d29ee.png) ※ Delphi 2 の BDE はバージョン 3.0 です。正しくインストールできなくても構わない気がします [^1]。 ### □ Delphi 3 そのままだと最後に `MFC40.DLL` / `OC30.DLL` のエラーが出てしまいます (インストーラは完走します)[^2]。 ![image.png](./images/dc4ffde4-deaa-7d2a-437f-fb14fe7a7199.png) `setup32.exe` のショートカットを作り [互換性] タブで `Windows 98/Windows Me` に変更し、このショートカットを実行します。 ![image.png](./images/797b5e18-39f6-1546-004f-455b66d828c3.png) BDE が設定できなかった旨のエラーは出ましたが、インストーラは完走しました。 ![image.png](./images/267822cd-4d9f-f699-4e81-474f2210c496.png) ※ Delphi 3 の BDE はバージョン 4.0、Delphi 3.1 の BDE はバージョン 4.1 です。正しくインストールできなくても構わない気がします [^1]。 # おわりに インストーラ全般の話になりますが、インストーラが 16bit アプリケーションの場合には、ファイルのプロパティの [詳細] タブを確認してみましょう。**Install Shield 3** で作られていればチャンスはあります。 ![image.png](./images/ee085e9a-9b59-fdec-581e-05267d6768ff.png) インストールされたアプリケーションが 16bit アプリケーションであった場合には **OTVDM** を使えば動作するかもしれません。 **See also:** - [Delphi 1.0 Client/Server が無償公開されたので Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](./a65e0950b906d28ccb5f.md) - [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 に Delpi 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 の最新版は Delphi 6 以降にバンドルされた `バージョン 5.2` です。 [^2]: 事前にインストール CD-ROM 内の `RUNIMAGE\WINDOWS\SYSTEM32` にある `MFC40.DLL` と `OC30.DLL` を `C:\Windows\System32` および `C:\Windows\SysWow64` へコピーしてインストーラを実行すれば最後までエラーは出ませんでした。