2009-02-24 9 views
1

J'ai une DLL VDD qui est chargée par un programme DOS s'exécutant dans le NTVDM. Cette DLL utilise C++/CLI et fait référence à un assembly .NET.L'assembly .NET ne se charge pas à partir de NTVDM

Dans l'ensemble, le processus de chargement est quelque chose comme ceci:

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

Les prntsr.com, prnvdd.dll et prnlib.dll fichiers sont tous dans le même dossier.

Cependant, lors du chargement, je reçois l'exception suivante:

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. 

Il ne recherche que C:\WINDOWS\system32\ pour l'assemblage, que je suppose que cela est dû à NTVDM.EXE - comme cela est le processus réel que la L'assembly est en cours de chargement, il prend son emplacement en tant que AppBase.

Des idées sur la façon de modifier l'AppBase ou de contourner ce problème?

+0

Je me demande comment est-il possible de charger écrit dans Dll C++/CLI (module mixte win32-.Net) à partir du programme DOS 16 bits? – macropas

+0

@maropas: Thunking et virtualisation. – codekaizen

Répondre

0

Il est vraiment pas une bonne idée d'essayer de tirer le CLR dans tous les cas de ntdvdm ...

Mais sans doute cela fonctionnerait mieux si vous avez fait votre assemblée un assemblage partagé, puisque ceux-ci sont stockés dans une norme emplacement et non recherché par rapport à l'application?

Questions connexes