CASA Net/WinNW7が起動しない

BDEのSHAREDMEMLOCATIONの設定

Windows VISTA以降のOSでCASAを稼働中にCASA Netを起動しようとすると、「Borland Database Engineの初期化中にエラーが発生しました。(エラー$2501)」などのエラーが出て、起動できない場合があります。

他のソフトウェアとの相性で発生する場合があります。CASA稼働中にWinNW7が開けない場合にも有効かもしれません。

BDEが使用する共有メモリのアドレスを変更する事で、問題が解決することがあります。

コントロールパネル内のBDE Administrator
コントロールパネルの「カテゴリ」を「大きいアイコン」に変更する ( 上図 1 ) と、「BDE Administrator」が表示されます ( 上図 2 ) 。BDE Administratorを起動し、環境設定タブを選択します。ツリーを環境設定 - Systemと辿り、INITをクリックします。

画面右側の領域に各設定項目と、現在の設定値が表示されます。この中のSHAREDMEMLOCATIONという項目を3BDEなどに変更する事で解決することがあるようです。

この値のデフォルトと最大/最小値は以下の通りです。(BDEヘルプより)
デフォルト (WindowsNT系)0x6BDE0000
最小値 (WindowsNT系)0x10000000
最大値 (WindowsNT系)0x7F000000
SHAREDMEMLOCATIONを編集後エンターキーを押すと上図2の「更新」ボタンが利用可能になります。このボタンをクリックし、「INITに対する変更をすべて保存しますか?」というメッセージにOKし、「すべてのBDEアプリケーションを再起動しなければなりません。」のメッセージにOKすると、変更が適用されます。

CASA関連のソフトをすべて終了させ、再度起動し、エラーが発生しないか確認します。

詳細情報

Windows VISTA以降のWindowsでは、ASLR (Address Space Layout Randomization) という、機能が搭載されました。これは、Windowsの機能がいつも同じメモリアドレスに配置されている事を前提とした攻撃に対するセキュリティ機能で、Windowsの起動ごとにWindowsの機能をランダムなアドレスに配置する事で、特定のメモリアドレスへの攻撃を回避しています。ランダムに配置されるアドレスの領域は、0x50000000 ~ 0x78000000のようです。この影響で、BDEのデフォルトである0x6BDE0000のままでは、アドレスの衝突が発生する可能性があります。

3BDEで他のアプリケーションと衝突がある場合には、環境に応じて変更してください。範囲外のアドレスを指定すると、設定は無視されデフォルトのアドレスが使用されます。

指定アドレスを色々と変更して試行錯誤するうちに、エラーが発生して BDE Administrator が起動しなくなる事があります。BDE Administrator を起動できなくなってしまった場合には、HKLM\SOFTWARE\Borland\Database Engine\Settings\SYSTEM\INIT に設定情報がありますので、レジストリの値を直接編集する事で復旧できます。

お詫び

以前、「SHAREDMEMLOCATIONの設定値に0x6BDE2000を設定する」というように書きましたが、BDEのヘルプに以下のように明記されていました。
SHAREDMEMLOCATIONの設定値は、WindowsNTの場合1000~7F00です。
0x6BDE2000と設定した場合、0x20000000に配置される事を確認しましたので、結果として設定されたアドレスは、範囲内ですのでSHAREDMEMLOCATIONに2000を設定したのと同じ事になり、基本的には問題はなさそうですが、誤った情報を掲載してしまい、誠に申し訳ございませんでした。

0x6BDE2000と設定されている場合、3BDEなどに修正して頂きますようお願いいたします。

謝辞

この情報に関しまして、偶然この記事をご覧いただいた、ユニコム株式会社の町田様より大変貴重な情報をメールして頂きました。町田様からメールを頂かなければ、誤りに気付くことも、詳細な情報に辿り着くこともできませんでした。お忙しい中、貴重な時間を使いメールしてくださいました町田様に心より深謝いたします。