У меня есть VDD dll, который загружается программой DOS, работающей внутри NTVDM . Эта dll использует C ++ / CLI и ссылается на сборку .NET.
В общем, процесс загрузки выглядит примерно так:
NTVDM runs:
prntsr.com which uses VDD RegisterModule to load:
prnvdd.dll which references .NET assembly:
prnlib.dll
Файлы prntsr.com
, prnvdd.dll
и prnlib.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 или иным образом обойти эту проблему?