
会社の Web サイトを Windows 2003x86 サーバーから IIS 7.5 を実行している Windows 2008x64 に移行しています。
私が抱えている問題は、古いサーバーでは正常に動作していたすべての DLL が、呼び出されるたびにエラーになるということです。次のような一般的なエラーが表示されます。
サーバー オブジェクト エラー 'ASP 0177: 800401f3'
Server.CreateObject に失敗しました
/folder/scriptname.asp、行 24
800401f3
エラーが発生する行は次のとおりです:
'23 lines of comments
set A0SQL_DATA = server.createobject("olddllname.Data")
'the rest of the script
そのサイトは、32 ビット モードに設定された App Pool で既に実行されています。しかし、とにかくエラーが発生します。
誰かこれを経験したことがありますか? 調べた情報によると、アプリ プールを 32 ビット モードで実行するように設定するだけでよいとのことなので、イライラしています。 それを実行しましたが、まだ動作しません。 他に何を確認すればよいでしょうか?
答え1
からこここれが見つかった場合:
このエラーは「無効なクラス文字列」を意味します。つまり、OLE サブシステムで名前オブジェクトが見つからないため、CreateObject の呼び出しが失敗しました。原因は次のとおりです。
結局、サーバー上で regsvr32 を実行していなかったのです。
regsvr32 を実行しましたが、エラーが報告されました。
誰かがレジストリの一部のセキュリティを変更したため、OLE サブシステムが HKEY_CLASSES_ROOT ツリーの全部または一部を読み取ることができなくなりました。
作成しようとしているオブジェクトの名前のスペルが間違っているか、正しくありません。
権限の問題かどうかを判断する
また、03 から 08 に移行しているので、IIS ロールにある IIS 6 管理互換性アドオンをインストールしましたか? 私は IIS や ASP の専門家ではないので、これが役立つことを願っています。
答え2
おそらく、DLL が 32 ビット DLL で、アプリケーション プールが 64 ビットで実行されている可能性があります。必要なのは、アプリケーションが実行されているアプリケーション プールを 32 ビット アプリケーション プールに変更することです。enable32BitAppOnWin64 については、次の URL を参照してください。http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add
UI でこれを行うには、AppPools のリストでアプリケーション プールを選択し (ツリー ノードを選択)、詳細設定を使用してこれを有効にします。