Windows-Server-2003

在 IIS 32 位模式下的 64 位視窗上從 ASP 呼叫 .Net 對象時,Server.CreateObject 失敗

  • November 11, 2010

我有一台執行 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。

http://blog.dantup.com/2010/03/intermittent-server-createobject-failed-asp-0177-8000ffff-error-creating-net-com-components

引用自:https://serverfault.com/questions/55782