WindowsServer2019 の IIS で Win32なClassicASPを動作させる

タイトル通りだけど Windows Server 2019 の IIS で ClassicASP(Win32) を動作させる

# 導入から動作確認

## まずは ASP の導入

このあたりは他の記事にも書いてあるでしょう。

<img width="492" alt="classicasp01.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/856309fb-bab5-7f3d-c365-265cfbac79f3.jpeg">

サーバの役割で**「ASP」**を選択する

## 仮想ディレクトリ(アプリケーションディレクトリ)を作成する

このあたりも旧来の IIS5/6 と同じような概念があるから大丈夫でしょう。

<img width="259" alt="classicasp02.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/78df4bcd-52ee-0729-c195-711b12f955aa.jpeg">

とりあえず、アプリケーションプールとしては「クラシック」となるモードを選択しておく。

## ハンドラーマッピングの確認

<img width="515" alt="classicasp03.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/f13127d2-d456-8860-e9a3-c77c6a2dd9ec.jpeg">

拡張子「.asp」に「ClassicASP」が対応している

<img width="319" alt="classicasp04.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/e74fd1aa-88bc-ca1e-9840-c1815a5f0a7c.jpeg">

ちなみに「%windir%」は環境変数で、Windowsのインストールディレクトリのこと。

大抵は「C:\Windows」だな。

## サンプルASPで動作確認

シンプルな「ハローワールド」

<img width="218" alt="classicasp05.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/dff7442f-b24d-96ee-266f-4a41152aef8a.jpeg">

うん、動作した

<img width="423" alt="classicasp06.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/acf65e48-4541-fd5d-f6d0-7538c65c3a4d.jpeg">

# いよいよ 32Bit 化

## アプリケーションプールの設定変更

<img width="273" alt="classicasp07.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/db21675c-271e-7817-62ce-fe228c448f74.jpeg">

「クラシックモード」のアプリケーションプールを新規作成して、「32ビットアプリケーションの有効化」を**「True」**にして、「ASPClassic」として保存して、これを ClassicASP のアプリケーションプールとして対応させる

<img width="471" alt="classicasp08.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/6e66df1d-2679-c033-ce56-00c46c8feab2.jpeg">

## ハンドラーの変更

<img width="319" alt="classicasp09.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/3223a3c4-50ad-12ef-4763-1676b7f79027.jpeg">

実は「ASP.dll」は二つあります。(64Bit と 32Bit)。← 私は、ハマりましたよ

**64Bit版のClassicASP**があるなんて想像できませんでしたよ。orz

SysWOW64 (64Bit Windows 上の Win32 な System32 のフォルダ)が 32Bit-ClassicASP ですよ。

<img width="508" alt="classicasp10.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/9d92d715-8137-94f6-7715-d3fde9663abc.jpeg">

という事で、ハンドラーマッピングを 32bit の ASP.dll に変更。

# 以上で終了

一応、VisualBASIC6.0で作った AcitiveX-DLL(当然 Win32 な COM コンポーネント)も、VisualBASIC6.0 ランタイム込みで Setup.exe を作って、それを使ってインストールしてやれば、以上の手順で動作した。(個人的経験で公式ではないよ)

# 蛇足1

<img width="319" alt="classicasp11.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/13dce068-1c48-00be-b545-6b8f493133b9.jpeg">

ActiveX.DLL を登録する「regsvr32.exe」も 64Bit と 32Bit の二つがあるので、VB6 で作った ActiveX.dll を登録する際には**「SysWOW64」**の「regsvr32.exe」を使う事

# 蛇足2

<img width="361" alt="classicasp12.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182822/129a63bf-be3d-58f1-df37-3d76d5aecbd8.jpeg">

ClassicASPとは直接関係ないけど「ActiveScript」という兄弟関係な WSH の「cscript.exe」「wscript.exe」も 32Bit と 64Bit の二つがあるよ。
WSH 内部で 32Bit な ActiveX-DLL を呼び出すなら、SysWOW64の「cscript.exe」「wscript.exe」を呼び出す必要がある。

# 蛇足3

Win64上の Win32 に関しては、レジストリも「HKCU\Software」とかが、軒並み「HKCU\Software\Wow6432Node\」にリダイレクトされていたりするので、注意です。

私の COM/ActiveX-DLL には、レジストリを扱うモノが多いのですが、.regファイルで、レジストリに登録する際にも、32Bit な regedit.exeを使う必要があったりしますよ。
(まぁ、手動で「Wow6432Node」へ移動させてもいいのですけど...)

# Win64上でのWin32なネタ

<dl>
 <dt><a href="http://yamori-jp.blogspot.com/2011/04/64bitwindows32bitsystem32.html">64bit版のWindowsで32bitアプリケーションからsystem32ディレクトリのファイルを開けない</a>
  <dd><b>%windir%\Sysnative\shell32.dll</b> というような <b>SysNative</b> という仮想ディレクトリがあるらしい。
</dl>

# 以上