Windows Server 2012でVB6.0のアプリケーションを動かす

Support Statement for Visual Basic 6.0 on Windows Vista, Windows Server 2008, Windows 7, Windows 8 and Windows 8.1, Windows Server 2012, and Windows 10」に互換性に関する情報があります。このページに「Supported Runtime Files to Distribute with Your Application」として動作保証されている再配布ファイルのリスト(全言語共通の物と、日本語など言語固有の物にリストが分かれています。)が公開されています。このファイルを別のフォルダにコピーしていきます。

また上記のリストではOSに付属していることになっていますが、msvbvm60.dllはWindows 2012に含まれていませんので、これもコピーします。

Visual Basic 6.0 Service Pack 6:ランタイム再頒布可能パッケージ (vbrun60sp6.exe)」をダウンロードします。ダウンロードしたVB6.0-KB290887-X86を解凍するとvbrun60sp6.exeが得られます。vbrun60sp6.exeのインストーラはCAB形式の自己解凍ファイルになっています。vbrun60sp6.exeを解凍すると、vbrun60sp6.exeがインストールするいくつかのファイルが得られます。その内の「W95INF32.DLL、W95INF16.DLL、ADVPACK.DLL」はリストに載っていませんがコピーします。

用意したランタイムファイルをWindows Server 2012の適当なフォルダ(ここではC:\VB6Runtimeとします)にコピーします。システムのPATH設定にC:\VB6Runtimeを追加したあと、拡張子がOCXの物についてはregsvr32コマンドを使用してレジストリに登録していきます。C:\Windows\System32にコピーした場合はregsvr32コマンドに失敗します。C:\Windows\System32にはランタイムを置かないで下さい。

「Supported and Shipping in Windows Vista, Windows Server 2008, Windows 7, and Windows 8」に含まれているファイルを誤って配布しないように注意してください。C:\Windows\System32を見てもmsado150.dllやmfc40.dllが が見当たりませんが、規定のインストール先がC:\Windows\SysWOW64やC:\Program Files (x86)\Common Files\System\Ole DBに移っているだけで、きちんと存在しています。無闇に導入してしまうと別の問題を引き起こす恐れがあるので、Supported and Shipping~の対象は絶対にコピーしないでください。

VB6.0のランタイムをインストールするためのフリーウェアがありますが、それらはC:\Windows\System32に複製しても問題なかった時代に設計された物がほとんどのはずです。無闇に利用するとトラブルの原因となり得ます。同じ理由で昔自作したインストーラも危険です。気をつけましょう。