Windows-Server-2003
在 IIS 32 位模式下的 64 位視窗上從 ASP 呼叫 .Net 對象時,Server.CreateObject 失敗
我有一台執行 64 位 Windows 2003 的伺服器,它以 32 位模式執行 IIS。我有一個使用以下命令註冊的 COM 對象:
C:\WINDOWS\microsoft.net\Framework\v2.0.50727>regasm D:\Path\To\MyDll.dll /tlb:MyTLB.tlb /codebase
當我通過 ASP 創建對象時,我得到:
Server object error 'ASP 0177 : 8000ffff' Server.CreateObject Failed /includes/a_URLFilter.asp, line 19 8000ffff
當我在 vbs 腳本中創建對象並使用 32 位版本的 cscript(在 \Windows\syswow64 中)時,它工作正常。
我已經檢查了 DLL 的權限,並且 IUSR 具有讀取/執行功能。
即使我將 IUSR 添加到管理員組,我也會收到同樣的錯誤。
這是來自 ProcessMonitor 過濾我的 dll 路徑的日誌(用我的操作註釋):
[Stop IIS] 1:56:30.0891918 PM w3wp.exe 4088 CloseFile D:\Path\To\MyDll.dll SUCCESS [Start IIS] [Refresh ASP page that uses DLL] 1:56:42.7825154 PM w3wp.exe 2196 QueryOpen D:\Path\To\MyDll.dll SUCCESS CreationTime: 8/19/2009 1:11:17 PM, LastAccessTime: 8/19/2009 1:30:26 PM, LastWriteTime: 8/18/2009 12:09:33 PM, ChangeTime: 8/19/2009 1:22:02 PM, AllocationSize: 20,480, EndOfFile: 20,480, FileAttributes: A 1:56:42.7825972 PM w3wp.exe 2196 QueryOpen D:\Path\To\MyDll.dll SUCCESS CreationTime: 8/19/2009 1:11:17 PM, LastAccessTime: 8/19/2009 1:30:26 PM, LastWriteTime: 8/18/2009 12:09:33 PM, ChangeTime: 8/19/2009 1:22:02 PM, AllocationSize: 20,480, EndOfFile: 20,480, FileAttributes: A 1:56:42.7826961 PM w3wp.exe 2196 CreateFile D:\Path\To\MyDll.dll SUCCESS Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Delete, AllocationSize: n/a, Impersonating: SERVER2\IUSR_SERVER2, OpenResult: Opened 1:56:42.7827194 PM w3wp.exe 2196 CreateFileMapping D:\Path\To\MyDll.dll SUCCESS SyncType: SyncTypeCreateSection, PageProtection: 1:56:42.7827546 PM w3wp.exe 2196 CreateFileMapping D:\Path\To\MyDll.dll SUCCESS SyncType: SyncTypeOther 1:56:42.7829130 PM w3wp.exe 2196 Load Image D:\Path\To\MyDll.dll SUCCESS Image Base: 0x6350000, Image Size: 0x8000 1:56:42.7830590 PM w3wp.exe 2196 Load Image D:\Path\To\MyDll.dll SUCCESS Image Base: 0x6360000, Image Size: 0x8000 1:56:42.7838855 PM w3wp.exe 2196 CreateFile D:\Webspace\SecurityDll\bin SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, Impersonating: SERVER2\IUSR_SERVER2, OpenResult: Opened 1:56:42.7839081 PM w3wp.exe 2196 QueryDirectory D:\Path\To\MyDll.INI NO SUCH FILE Filter: SecurityDll.INI 1:56:42.7839281 PM w3wp.exe 2196 CloseFile D:\Webspace\SecurityDll\bin SUCCESS [Refresh ASP page that uses DLL] [Refresh ASP page that uses DLL] [Refresh ASP page that uses DLL]
此 dll 在執行 32 位 Windows 的其他伺服器上執行良好。我想不出還有什麼可以使這項工作的。有什麼建議?
更新>
.dll 不在 GAC 中,它被編譯為 32 位,並且是強簽名的。
你們需要學習閱讀——這不是asp.net。
- 好的,首先:32 位很好,但 32 位模式 IIRC 不適用於 ASP,僅適用於 ASP.NET。
- 因此,ASP(經典 ASP,即您的 URL 所指示的)仍將是 64 位的。
- 而且由於您無法在 64 位程序空間中載入 32 位 com oejct - 就可以了。錯誤解釋。
基本上我建議返回並在此處安裝 32 位作業系統,然後中期(盡快)為 ASP.NET 停用 ASP。