古い DLL を 64 ビット サーバーで実行する方法

古い DLL を 64 ビット サーバーで実行する方法

会社の 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 のリストでアプリケーション プールを選択し (ツリー ノードを選択)、詳細設定を使用してこれを有効にします。

関連情報