web-dev-qa-db-ja.com

ASP 32ビットモードの64ビットウィンドウでIIS)から.Netオブジェクトを呼び出すと、Server.CreateObjectが失敗する

Windows 2003 64ビットを実行しているサーバーがあり、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をAdministratorsグループに追加しても、同じエラーが発生します。

これは、私のdllのパス(私のアクションで注釈が付けられている)のProcessMonitorフィルタリングからのログです:

[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ビットウィンドウを実行している他のサーバーで正常に動作します。私はこれを機能させるものは他に考えられません。助言がありますか?

更新>

.dllはGACになく、32ビットとしてコンパイルされ、強く署名されています。

1
DrFredEdison

あなたたちは読書を学ぶ必要があります-これはasp.netではありません。

  • わかりました、最初に:32ビットは素晴らしいですが、32ビットモードIIRCはASP用ではなく、ASP.NET専用です。
  • そのため、ASP(URLが示すクラシックASP)は64ビットのままです。
  • そして、64ビットのプロセススペースに32ビットのcom oejctをロードすることはできないので、そこに行きます。エラーの説明。

基本的に、ここに戻って32ビットOSをインストールしてから、中期(ASAP)でASP.NETのASP)を廃止することをお勧めします。

0
TomTom
2
Rob

確認すべき点がいくつかあります。

  • その.dllがグローバルアセンブリキャッシュにもあるかどうかを確認します(ないはずです)。コントロールパネルを見る| GACを検査できる.NETFramework2.0構成の管理ツール
  • 議会は強力な名前の議会でなければなりません(署名されたものなど)

regasm MSDNページ をご覧ください。

また、その.dllは64ビット用にコンパイルされていませんでしたね。 (明らかなことを除外するためだけに...)

1
squillman

私はまったく同じことをしようとしていましたが、Win7とIIS 7.5でした。最終的には、32ビットバージョンと64ビットバージョンの両方のREGASMを使用して動作させることができましたが、どちらがシステムを機能させたかを正確に追跡することはできません。

0
smaclell