1

NTVDM内で実行されている DOS プログラムによってロードされる VDD dll があります。この dll は C++/CLI を使用し、.NET アセンブリを参照します。

全体として、読み込みプロセスは次のようになります。

  NTVDM runs:
    prntsr.com which uses VDD RegisterModule to load:
      prnvdd.dll which references .NET assembly:
         prnlib.dll

、およびファイルはすべて同じフォルダーにありますprntsr.comprnvdd.dllprnlib.dll

ただし、ロード時に次の例外が発生します。

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'PRNLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ecf23cee305e91b7' or one of its dependencies. The system cannot find the file specified.
File name: 'PRNLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ecf23cee305e91b7'
   at VDD_Initialise()

=== Pre-bind state information ===
LOG: User = DOMAIN\user
LOG: DisplayName = PRNLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ecf2
3cee305e91b7
 (Fully-specified)
LOG: Appbase = file:///C:/WINDOWS/system32/
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: PRNLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ecf23cee305e91b7
LOG: Attempting download of new URL file:///C:/WINDOWS/system32/PRNLib.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/system32/PRNLib/PRNLib.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/system32/PRNLib.EXE.
LOG: Attempting download of new URL file:///C:/WINDOWS/system32/PRNLib/PRNLib.EXE.

アセンブリのみを検索C:\WINDOWS\system32\します。これは NTVDM.EXE が原因だと思います。これは、アセンブリが読み込まれる実際のプロセスであるため、その場所を AppBase として取得します。

AppBase を変更する方法や、この問題を回避する方法はありますか?

4

2 に答える 2

0

AppDomain.AssemblyResolveイベントをフックし、自分で解決を行うことで成功するはずです。

于 2011-01-07T05:57:43.910 に答える
0

CLRをntdvdmのすべてのインスタンスに取り込もうとするのは、本当に良い考えではありません...

しかし、おそらく、アセンブリを共有アセンブリにした方がうまくいくでしょうか? これらは標準の場所に格納され、アプリケーションに関連して検索されないからです。

于 2011-01-07T05:46:29.657 に答える