Server 2008 および IIS 7 に 32 ビット ASP Web アプリを展開しようとしています。
アプリが正常に実行されている別のサーバーがありますが、このサーバーでは、DLL の 1 つを呼び出す ASP ページを読み込むたびに、エラー 429: ActiveX コンポーネントがDLLにオブジェクトを作成できません が表示されます。
この問題についてオンラインで見つけた次の修正をすべて試しました。 アプリケーション プールで 32 ビット アプリケーションを有効にします。C:\Windows\SysWOW64 フォルダーから DLL を (RegSvr32 を使用して) 再登録します。
SysInternals Process Monitor を実行して結果を比較すると、正しく動作しているマシンでページをロードすると、dllhost.exe プロセスと w3wp.exe プロセスの間でアクティビティが均等に混在していることがわかります。
失敗したサーバーでは、成功したサーバーで行われていないレジストリへの呼び出しが表示されます。これには、HKLM\SOFTWARE\Wow6432Node\Microsoft\VBA\Monitors HKCR\ が何であるかわからないものも含まれます。 Wow6432Node\Interface{6F255EB7-E73A-4579-B0EC-045FBC00992D}\InterfaceHelperDisableTypeLib HKCR\Wow6432Node\Interface{6F255EB7-E73A-4579-B0EC-045FBC00992D}\InterfaceHelperDisableAll HKCR\Wow6432Node\Interface{6F255EB7-E73A-4579-B0EC-045FBC00992D} \InterfaceHelperUser
これらの呼び出しはすべて、dllhost.exe プロセスを使用して行われます。w3wp.exe プロセスは、エラー ページが表示されるまで再起動されません。
これらは 2 つの新しいサーバーです。それらの間の構成の違いを特定することはできませんでした。
また、私はこのアプリをサポートすることが期待されていますが、ソース コードにアクセスできず、ブレーク ポイントなどを含むデバッグ モードでソースを実行することはできません。
この 32 ビット コードを 64 ビット サーバーで実行しようとしている方法に何らかの構成エラーがあるのではないかと強く疑っていますが、それを証明する方法や修正方法についてのアイデアがありません。
ありがとう、ビル
更新: 問題は、再生成が必要な .tlb ファイルであることが判明しました。私の会社で C# 開発を行っていて、ソース コードを見ることを許可されている少数の人々の何人かは、アプリを実行する DLL の 1 つにそれを実行するためのメソッドがあることをすぐに発見しました。彼らは、それを呼び出してファイルを生成する VB スクリプトを作成し、すべてが再び稼働しました。
.tlb とは何か、またはそれが機能した理由を知るには、Windows 開発について十分に知りませんが、64 ビット (おそらく任意のサーバー) で実行されない 32 ビット Web アプリを使用している場合の話の教訓は、Windows サーバーです。エラー 429 のため、.tlb ファイルをよく見てください。何を探しているのか、私に聞かないでください。