BMSE /uBMplay関連の覚書
BMSEを動かすために必要な、 Visual Basic 6に関連する三個のfiles。
MSVBVM60.DLL : 現時点での最新版は version 6.0.98.32 (KB2575928 ) COMDLG32.OCX : 現時点での最新版は version 6.1.98.41 (KB3096896 ) MSCOMCTL.OCX : 現時点での最新版は version 6.1.98.46 (KB3096896 )
2016年 もVisual Basic 6関連の新しい更新が提供され続けているが([MS16-004 ])、 「統合開発環境としてのVisual Basic 6」を備えていないcomputerにはinstallされない。私は以下の手順で自衛を試みた。
古いActiveX Controlsが導入済みなら各OCXのversionを確認する。最新版でないなら以下の手順に進む。
VB60SP6-KB3096896-x86-XXX .msi を7-Zip で開き、最新のCOMDLG32.OCX とMSCOMCTL.OCX を取り出す。
古いActiveX Controlsの登録があれば解除する。 Command Prompt (Admin)から以下を入力する。32-bitの場合: C:\Windows \System32 \regsvr32.exe /u COMDLG32.OCX MSCOMCTL.OCX
64-bitの場合: C:\Windows \SysWOW64 \regsvr32.exe /u COMDLG32.OCX MSCOMCTL.OCX
新しいActiveX Controlsを以下の場所にcopyする。古いActiveX Controlsがあれば上書きする。32-bitの場合: C:\Windows \System32 \COMDLG32.OCX およびMSCOMCTL.OCX 64-bitの場合: C:\Windows \SysWOW64 \COMDLG32.OCX およびMSCOMCTL.OCX
新しいActiveX Controlsを登録する。 Command Promptを管理者として実行し、以下を入力する。32-bitの場合: C:\Windows \System32 \regsvr32.exe COMDLG32.OCX MSCOMCTL.OCX
64-bitの場合: C:\Windows \SysWOW64 \regsvr32.exe COMDLG32.OCX MSCOMCTL.OCX
Elevated Command Promptを用いてもerrorが発生する可能性はある。私の場合、se188840 によってWindows 8.1に導入したmsrdo20.dll を、 Upgraded Windows 10上でUnregisterできなかった (Error Code: 0x80004005 )。 Safe mode上でCommand Prompt (Admin)を試すと、うまくいった。
BMSE ToolbarのCombo Boxesが変な位置に表示される
[MS12-027 ]のsecurity updateに起因する、MSCOMCTL.OCX v6.1.98.33以降で必 ず 発生する現象。bmse.ini をNotepadなどで開き、該当するkeys (Grid
, Size
, Resolution
)の値をTrue
に変更して保存すれば直る。False
なら崩れる。
Grid=False
Size=False
Resolution=True
統合開発環境としてのVisual Basic 6や、 Microsoft Officeなどが導入されている環境に対しては、 2012年4月からWindows Updateが提供されている。しかしBMSE Toolbar崩壊現象を手元で再現できないusersは、 ActiveX Controlsの脆弱性を取り除かないまま放置している可能性がある (私のように)。
重要でない事柄の備忘録
Windows ME /2000以降は標準で%WINDIR %
配下にMSVBVM60.DLL を持っている [註1] 。通常はMSVBVM60.DLL をわざわざ用意する必要はないし、無理に最新版に更新する必要もない。KB2575928 はWindows 7 /Server 2008にしか関係がないので、 Windows 8以降が持つMSVBVM60.DLL はv6.0.98.15 (KB970157 )に留まっている。
Windows ME: C:\WINDOWS \SYSTEM \MSVBVM60.DLL (v6.0.84.95)Windows 2000: C:\WINNT \System32 \MSVBVM60.DLL (v6.0.84.95)32-bit XP and later: C:\Windows \System32 \msvbvm60.dll 64-bit XP and later: C:\Windows \SysWOW64 \msvbvm60.dll
「Windows ME、 2000、 SP2までのXP、 Server 2003無印」のMSVBVM60.DLL は、VB6SP6よりも古い 。これらの使用者はMSVBVM60.DLL を導入しなおすほうが無難かもしれない。また、 Windows 95 /98 /98SE /Meの使用者は、MSVBVM60.DLL を別途用意する必要がある (無難な配置場所は “C:\WINDOWS \SYSTEM \MSVBVM60.DLL ”)。
[註1] Windows XP EmbeddedはMSVBVM60.DLL を持たない らしい 。
Windows Vista未満なら、BMSE.exe やuBMplay.exe の同位にRuntimesを配置することもできる。この方法の場合、 Visual Basic 6 Runtimesを登録しないままでもBMSEやuBMplayを使うことができる。
bmse\
lang\
theme\
BMSE.exe
readme.txt
+
MSVBVM60.DLL (if Windows 95 /98 /98SE /Me)
COMDLG32.OCX (if Windows 95 /98 /98SE /Me /2000 /XP)
MSCOMCTL.OCX (if Windows 95 /98 /98SE /Me /2000 /XP)
Windows Vista以降、 Visual Basic 6 Runtimesに関してはこの方法は封印された。しかしVisual C++ 2010 Runtimesに関しては、 Windows 10においてさえ依然としてこの方法を使用することができる。
“Microsoft Visual C++ 2010 x86 Redistributable ” から、vcredist_x86.exe をdownloadする。
vcredist_x86.exe を実行せずに 、 WinRARや7-ZipやExplzhなどのarchiverから開く。
書庫内階層らしき “. ( FULL STOP ) ” を何度か潜ると、 “.\.\.\. \vc_red.cab ” 書庫が見つかる。これを展開する。
“F_CENTRAL_msvcr100_x86 ” が見つかる。これを展開し、 “msvcr100.dll ” にrenameする。
Version 1.5.0以降の “uBMplay.exe ” の同位に、前述の “msvcr100.dll ” をcopyする。
前述の手順なら、 Visual C++ 2010 Runtimesを導入することなく、 uBMplay 1.5.0以降で音声を再生できる。
豆知識
uBMplay 1.3.13以前は、COMDLG32.OCX やMSCOMCTL.OCX を要求しない(たぶん)。
uBMplay 1.4 .0以降は、MSCOMCTL.OCX を要求しない(Easter Eggまで確認したわけではないが) 。
Sound Card Audio Driversがない状態でuBMplayを起動すると、 Runtime Errorが発生する。
4 BPP (16 colors)以下のdisplayでuBMplayを起動すると応答しない。
1 BPP (monochrome)のdisplayでBMSEを起動すると普通に働く。
古い環境でbMoLを使うなら、Visual C++ 2005 Redistributable (x86) の導入が必要。(SP1でなくても構わない)
BMSCの配色、およびBMSEのBMSC互換配色は、 4 BPP 環境への配慮だった…ということに今頃気づいた。
BMSE Help の旧配色は、低画質時にまともに読めなかった。
私は可能な限り当時の環境で閲覧できるようにしたかったのでSafest web colors を採用したが、 2016年現在はdisplayの色制限に配慮する必要性は皆無だろう。 Windows 8以降はSafe Modeでさえ32 BPP (True Color)…