読者です 読者をやめる 読者になる 読者になる

「ScriptEngine が例外 ’C0000005’ を発生しました。」のヒント

VB.NET .NET

VB6のCOM+コンポーネントVB.NETで作り直しています。

作り損ねのコンポーネントを使っているクラシックASPのページを表示させると"403 Access Forbidden"となることがしばしば。
Wiresharkでパケットキャプチャするまで403エラーが返ってるとは気づきませんでした。(;_;)
#ブラウザ上の見た目は、「サーバーが見つからないか、DNS エラーです。」ですから。

原因を調べてぐぐってみるとイベントログを見ろとのこと。こんなログが残ってました↓

イベント ID (5) (ソース Active Server Pages 内) に関する説明が見つかりませんでした。
リモート コンピュータからメッセージを表示するために必要なレジストリ情報または
メッセージ DLL ファイルがローカル コンピュータにない可能性があります。
この説明を取得するために /AUXSOURCE= フラグを使用することができる可能性があります。
詳細については、ヘルプとサポートを参照してください。
次の情報はイベントの一部です:
   スクリプト エンジンが例外を発生しました. ScriptEngine が例外 'C0000005' を発生しました。
   'IActiveScript::SetScriptSite()' 内の 'CTemplate::AddScript()' が発生原因です。.

Hata.ccによれば、例外C0000005は“ぬるぽ参照”だそうだ。いかにもCOMがらみでありそうな話。

C0000005 ScriptEngine - Google 検索と日本語サイトのみをぐぐっても結果12件で情報が得られなかったので、ウェブ全体から検索してトップに表示されたScriptEngine threw exception 'C0000005' - ASP / Active Server Pagesを見てみると、

"The failure is in VBScript.dll, but the cause of the failure is that something else has corrupted Thread Local Storage (TLS) and VBScript is failing during initialization. It is most likely a com object that has failed previously and left trash behind. To get rid of the error update VBScript to the latest build (msdn.microsoft.com/scripting) and get the latest MDAC (www.microsoft.com/data)"

とネットニュースの記事から引用してありました。

babydaemons的にYahoo!翻訳よりマシ程度に意訳してみると、

「その不具合はVBScript.dllの中で起きてますが、その原因は何者かがThread Local Storage (TLS)を破壊したということです。そしてVBScriptが初期化中に落ちています。たぶん原因は、それ以前に落ちてゴミを残したCOMオブジェクトだと思われます。そのエラーの解決のためにVBScriptを最新版(msdn.microsoft.com/scripting)に更新し、最新版のMDAC(www.microsoft.com/data)を入手してください。」

という感じでしょうか。

結論:やっぱり、自分のところがバグってるのね・・・orz