2011-03-11 13 views
12

Tengo delante una DLL. Usando solo el SDK de Win32, ¿puede decirme si este archivo DLL es un ensamblado de .NET?¿Este DLL está administrado o no?

¿Por qué? Nuestra aplicación carga complementos en forma de DLL. Estamos tratando de ampliar la definición de estos complementos para permitir ensamblados de .NET, pero la interfaz será diferente y, por lo tanto, el cargador deberá saber si el archivo DLL está administrado o no administrado antes de cargarlo.

+0

Puede solicitar a los creadores de complementos que incluyan un recurso especial. –

Respuesta

7

Simplemente intentaría cargarlo como un ensamblado .NET, y si falla, retroceder a la interfaz "no administrada".

+0

¿No se cargan errores como las dependencias faltantes cuando la carga de ensamblados administrados hace que el cargador de complementos vuelva al modo no administrado innecesariamente? – Harindaka

+0

@Harindaka: supongo que sí, ¿y qué? El cargador no administrado también fallará, y eso será el final de la historia. ¿Qué problemas ves con esto? –

11

Para determinar si una DLL (o EXE) es administrada o no, use dumpbin.exe with the /dependents switch. Si ve mscoree.dll in the output, entonces el conjunto es un conjunto administrado.

Por ejemplo, para un archivo DLL administrado que he creado en Visual Studio 2010, me sale el siguiente resultado:

Dump of file <MANAGED_DLL>.dll 

File Type: DLL 

    Image has the following dependencies: 

    mscoree.dll 

    Summary 

     2000 .reloc 
     2000 .rsrc 
     2000 .sdata 
     12000 .text 

dumpbin.exe se entrega como parte de los Visual Studio Tools. Para ejecutarlo, una forma conveniente de hacerlo es a través del Visual Studio Command Prompt. Por ejemplo, de mi máquina de Windows 7 se ejecuta Visual Studio 2010, encuentro que el Visual Studio Símbolo del sistema en el menú de Inicio de Windows en:

Microsoft Visual Studio 2010 =>Visual Studio Tools =>Visual Studio Símbolo del sistema (2010)

Entonces, dentro del sistema de Visual Studio pronta acaba de entrar:

dumpbin /dependents DLL_OF_INTEREST.DLL 

o

dumpbin /dependents EXE_OF_INTEREST.EXE 

Como alternativa, puede utilizar la utilidad corflags.exe que también se incluye con Visual Studio Tools. Ejecutarlo desde el Visual Studio de comandos en un administrado montaje:

corflags UNMANAGED.DLL 

..you'll obtener:

corflags : error CF008 : The specified file does not have a valid managed header 

...mientras que en un lograron montaje, que obtendrá algo como:

Version : v2.0.50727 
CLR Header: 2.5 
PE  : PE32 
CorFlags : 1 
ILONLY : 1 
32BIT  : 0 
Signed : 0 

relacionadas:

Cuestiones relacionadas