2010-05-07 14 views
17

Considere que tenemos aplicación .NET Winforms o aplicación de consola. ¿Alguien puede decirme qué sucederá paso a paso hasta que se inicie la aplicación WinForm o la aplicación de consola? Me gustaría saber las partes internas, como cómo se comunicará EXE con Framework, cuál es el papel de CLR, qué sucede en caso de excepción al lanzar la aplicación en sí misma. ...¿Qué sucede cuando el usuario hace clic en el ensamblado .NET (EXE)?

+6

¿Como respuesta de stakoverflow? Hay libros escritos sobre eso que tienen cientos de páginas;) – TomTom

+5

@TomTom - ¡Eso no es muy justo! ... esas son las versiones abreviadas. –

+2

1. Descargue Mono. 2. Compilarlo. 3. Comience bajo un depurador. 4. Solo paso. 5. Repita el paso 4. –

Respuesta

13

Al hacer doble clic en un montaje .exe .net:

  • patadas del cargador de Windows PE en
  • Si estás en un Windows> = Windows XP se detectará que el ejecutable es un ejecutable administrado y la remitirá al .net llamando _CoreExeMain en mscoree.dll (_CoreDllMain si hizo doble clic en un .dll administrado). Puede usar el archivo de configuración del ensamblado para saber qué tiempo de ejecución usar.
  • Si está en Windows < Windows XP, el archivo .exe contiene una pequeña pieza nativa de código que saltará a _CoreExeMain o _CoreDllMain de mscoree.dll.
  • Entonces mscoree.dll inicializa el tiempo de ejecución de .net, dependiendo de la configuración global, el archivo de configuración del ensamblado y lo que no.
  • Luego, si es un .exe, JIT compilará su método de punto de entrada y comenzará a ejecutarlo.
+0

Esto es genial. Gracias por tu respuesta Jb Evain! – Sathish

1

El MSCoreEE.dll (mscore Ejecución engine.dll sólo una instancia para una máquina) decir, por ejemplo cuando un ensamblado de .NET/.exe se hace doble clic o puesto en marcha, el sistema operativo se carga el cargador de Windows que se Invertir cargar el encabezado PE (ejecutable portátil) [en el caso de ejecutable Win32, el encabezado PE contendrá la dirección de la rutina de arranque (Main() estática desde donde se cargará y ejecutará el método principal, donde como en .Net, el bootstrap contendrá la dirección de MSCoreEE.Dll que estará presente en C: \ Windows \ System32 \ mscoree.dll que se ejecutará y cargará el tiempo de ejecución .Net para el cual se diseñó el ensamblado .net. Puede haber múltiples versiones de .Net runtime instaladas en la máquina, sin embargo, solo habrá una instancia de mscoreee.dll para cargar los tiempos de ejecución específicos.

El CLR va a crear el primer dominio APP sí mismo y cargar el conjunto (si el conjunto no creó dominios de aplicaciones adicionales en código)

El CLR crea 3 dominios de aplicación internamente 1. Sistema App Domain una .  es responsable de cargar los dominios de aplicación Compartida y Predeterminada, también carga mscorelib.dll al dominio de aplicación compartida b.  Cree 3 instancias separadas de Excepciones i. Motor fatal excepción ii. Exceso de desbordamiento de pila iii. Excepción de falta de memoria (muy importante, la CLR previene la excepción de "memoria insuficiente", cuando el desarrollador piensa que la aplicación puede quedarse sin memoria y desea escribir la excepción en un archivo de registro, la excepción de falta de memoria se realizará porque no no queda memoria para crear una nueva instancia de esta excepción, por lo tanto, CLR previene esta excepción para uso futuro en la aplicación 2. Dominio de aplicaciones compartidas a. Contiene mscorlib.dll b.Otras bibliotecas comunes que utilizan otros dominios de aplicaciones c. Sin embargo, el desarrollador no puede insertar Dll personalizados en el dominio de aplicación compartida ya que no se puede controlar desde fuera de CLR, CLR aloja estos dll y CLR no puede controlarse cómo está alojado por un desarrollador, aunque es posible usar algunas interfaces COM donde el desarrollador puede alojar el CLR habitual 3. Dominio de aplicación predeterminado a. Todos los archivos binarios del usuario .exe's, Dlls se carga aquí

Cuestiones relacionadas