IISが64ビットとして実行されているときに、32ビットバージョンのOracleAccess.dllをロードしようとしているWebアプリケーションの可能性が高い問題を特定しようとしています(32ビット版と64ビット版の両方に見えます)。オラクルのドライバが並行してインストールされる可能性があります)。IIS 6.0 64ビット:32ビットDLLがロードされているSysInterals Proc Explorer?
サーバーには、本番用とテスト用の2つのサイトがあります。プロダクションには、もはや私たちと一緒にいない従業員によって導入されたコードがあります。そのサイトは機能します。もう展開したばかりのサイト。 Any CPU
のためにコンパイルされ、Oracleドライバのロード中にエラーが発生しました。
SysInternalのプロセスエクスプローラで本番サイトのIISワーカープロセスを表示し、IISワーカープロセスを強調表示し、読み込まれたDLLを下のウィンドウビューで表示すると、奇妙なデータが表示されます。ワーカープロセスのための
情報:
Process Version User Name PID Image Type
w3wp.exe 6.0.3790.3959 NT AUTHORITY\NETWORK SERVICE 3320 64-bit
しかし、ロードされたDLLのリストでは、いくつかは、64ビット画像として一覧表示され、そしていくつかは、32ビットとして記載されていますか? 32ビットDLLを64ビットのプロセス空間にロードすることはできません(AFAIK)ので、私が見ているレポートを理解していない可能性があります。私は作業が、生産DLLが、私は出力を理解していれば、彼らはしている... 32ビットのために明示的にコンパイルされたかどうかを確認するためにcorflags
を使用しました
Name Image Type Description Company Name Version
aspnet_filter.dll 64-bit Microsoft ASP.NET ISAPI Filter DLL Microsoft Corporation 4.0.30319.1
admwprox.dll 64-bit IIS Admin Com API Proxy dll Microsoft Corporation 6.0.3790.3959
adsldp.dll 64-bit ADs LDAP Provider DLL Microsoft Corporation 5.2.3790.3959
adsldpc.dll 64-bit ADs LDAP Provider C DLL Microsoft Corporation 5.2.3790.3959
advapi32.dll 64-bit Advanced Windows 32 Base API Microsoft Corporation 5.2.3790.4555
aspnet_filter.dll 64-bit Microsoft ASP.NET ISAPI Filter DLL Microsoft Corporation 4.0.30319.1
aspnet_isapi.dll 64-bit Microsoft ASP.NET ISAPI Shim DLL Microsoft Corporation 2.0.50727.3053
comctl32.dll 64-bit Common Controls Library Microsoft Corporation 5.82.3790.4770
comctl32.dll 64-bit User Experience Controls Library Microsoft Corporation 6.0.3790.4770
comres.dll 64-bit COM+ Resources Microsoft Corporation 2001.12.4720.3959
(Next few are our DLLs)
CSA.Database.DLL 32-bit CSA.Database TE 1.7.8221.0
CSA.Database.DLL 32-bit CSA.Database TE 1.7.8221.0
CSA.Loggers.DLL 32-bit CSA.Loggers TE 1.7.8221.0
CSA.Loggers.DLL 32-bit CSA.Loggers TE 1.7.8221.0
CSA.Network.DLL 32-bit CSA.Network TE 1.7.8221.0
CSA.Network.DLL 32-bit CSA.Network TE 1.7.8221.0
Enterprise.Data.DLL 32-bit Enterprise.Data TE 2.35.3.0
Enterprise.Data.DLL 32-bit Enterprise.Data TE 2.35.3.0
Enterprise.Diagnostics.DLL 32-bit Enterprise.Diagnostics TE 2.35.3.0
Enterprise.Diagnostics.DLL 32-bit Enterprise.Diagnostics TE 2.35.3.0
(More Microsoft DLLs... some 32-bit, some 64-bit??)
FederatedLibrary.DLL 32-bit FederatedLibrary Microsoft 1.0.0.0
FederatedLibrary.DLL 32-bit FederatedLibrary Microsoft 1.0.0.0
gdi32.dll 64-bit GDI Client DLL Microsoft Corporation 5.2.3790.4396
gzip.dll 64-bit GZIP Compressn DLL Microsoft Corporation 6.0.3790.1830
Microsoft.Practices.EnterpriseLibrary.Common.DLL 32-bit Enterprise Library Shared Library Microsoft Corporation 4.1.0.0
Microsoft.Practices.EnterpriseLibrary.Common.DLL 32-bit Enterprise Library Shared Library Microsoft Corporation 4.1.0.0
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.DLL 32-bit Enterprise Library Exception Handling Application Block Microsoft Corporation 4.1.0.0
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.DLL 32-bit Enterprise Library Exception Handling Application Block Microsoft Corporation 4.1.0.0
Microsoft.Practices.EnterpriseLibrary.Logging.DLL 32-bit Enterprise Library Logging Application Block Microsoft Corporation 4.1.0.0
Microsoft.Practices.EnterpriseLibrary.Logging.DLL 32-bit Enterprise Library Logging Application Block Microsoft Corporation 4.1.0.0
(And finally, the Oracle drivers that seem to be causing issue... 64-bit)
oracle.dataaccess.dll 64-bit Oracle.DataAccess.dll Oracle Corporation 2.112.1.0
oracle.dataaccess.dll 64-bit Oracle.DataAccess.dll Oracle Corporation 2.112.1.0
:DLLのハンドル情報の
サブセットない。
C:\SingleSignOn\bin>corflags CSA.Network.dll
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 1
ILONLY : 1
32BIT : 0
Signed : 0
新しくコンパイルの展開が動作しない理由を理解するための最初のステップは、現在の1がない理由を理解することです。誰も私が見ていることを私に説明することはできますか?
- は、IISが64ビットプロセスとして実行されている、そしてそれは、64ビットとして
Any CPU
DLLをロードします:私が知っている必要がありますか?
- はいの場合、これらのDLLはプロセスエクスプローラで32ビットイメージとして表示されるのはなぜですか?
- IISが32ビットDLLを64ビットプロセス空間にロードすることは可能ですか?
- IISが64ビットプロセスで、
Any CPU
としてコンパイルされたWebサイトを読み込むと、依存するDLLのいずれかが32ビットDLLである場合、強制的に32ビットが強制されます(たとえば、32ビットOracleドライバのバージョン?)事前に
おかげで...
ありがとう、David、それについて説明します...私は32ビットとしてリストされたすべてのMicrosoft DLLが.NET DLLであることがわかります(FederatedLibrary.dllについてはわかりませんでしたがもちろんそうだ)。今私はちょうどそれが64ビットではないロードしようとしているものを理解する必要があります:) –