Estoy tratando de entender cómo un generador de perfiles de código (en este caso, el Drone Profiler) ejecuta una aplicación .NET de forma diferente a simplemente ejecutarlo directamente. La razón por la que necesito saber esto es porque tengo un problema/corrupción muy extraño con la instalación .NET de mi computadora dev, que se manifiesta fuera del generador de perfiles pero extrañamente no dentro y si puedo entender por qué probablemente pueda solucionar el problema de mi computadora.¿De qué manera la ejecución de la aplicación C# dentro de un generador de perfiles de código difiere de la ejecución de un generador de perfiles de código externo?
El problema SÓLO parece afectar las llamadas a los métodos de System.Net.NetworkInformation (y solo dentro de .NET 3.5 a 2.0, si construyo algo contra 4 todo está bien). Creé una pequeña aplicación de prueba que solo hace una cosa, llama a System.Net.NetworkInformation.IsNetworkAvailable(). Fuera del generador de perfiles aparece "Error de motor de ejecución fatal" en System.dll, y esa es toda la información que proporciona. Por lo que entiendo, ese error generalmente resulta de llamadas a métodos nativos, que presumiblemente ocurren cuando System.dll permite que algunas DLL nativas realicen la lógica IsNetworkAvailable().
- Me trataron de averiguar el interior y el exterior de la diferencia de perfiles utilizando Process Monitor, grabación de eventos de ambas situaciones y compararlas. Ambos registros fueron los mismos hasta justo después de que se llamaran iphlpapi.dll y winnsi.dll y justo antes de que el código ejecutado por el generador de perfiles dnsapi.dll y el código sin perfil comenzaran a cargar cosas relacionadas con los informes de fallos. En ese momento, cuando parecía ir mal, el código ejecutado por el generador de perfiles creó 4-6 hilos nuevos y el código que no es de perfil (colisión) solo creó 1 o 2. No sé lo que eso significa, en todo caso.
Podría decirse innecesaria fondo
Mi Windows 7 incluye instalación de .NET (a 3.5 a 2,0) estaba trabajando bien hasta que mi disco duro sufrido alguna corrupción y CheckDisk comenzó la búsqueda de clústeres defectuosos. Imaginé el disco a uno nuevo y todo funciona bien, excepto este problema con .NET.
Necesito resolver este problema reinstalando Windows o volviendo a las copias de seguridad de imágenes.
Estas son algunas de las cosas que he mirado en:
- He diffed los archivos/directorios que parecían más relevantes (las cosas .NET en Archivos de Windows y el Programa) pre- y post-disco problema y no vi ningún cambio donde no esperaba ninguno (no hay corrupción obvia del archivo).
- He diferido el software y las colmenas del registro del sistema antes y después del disco y no he visto cambios que parezcan relevantes.
- He creado una nueva cuenta de usuario y he limpiado cualquier variable de entorno en caso de que el entorno estuviera relacionado. Ningún cambio.
- Hice "sfc/scannow" y no encontró problemas de integridad.
- Intenté "actualizar ngen" para regenerar el código precompilado en caso de que haya olvidado algo que pueda estar dañado y no haya cambiado nada.
- Quité mi antivirus para ver si estaba interfiriendo, no hay diferencia.
- Intenté ejecutar el código de prueba en modo seguro, el mismo problema de bloqueo.
Supongo que necesito reparar mi instalación de .NET pero como Windows 7 incluye .NET 3.5 - 2.0, no puede simplemente volver a ejecutar un instalador de .NET para rehacerlo.No tengo acceso a los discos de Windows para intentar reinstalar Windows sobre sí mismo (la computadora tiene una partición de recuperación pero no se puede usar); también el disco usa una solución de cifrado de disco completo y la reinstalación sería difícil.
No quiero empezar desde cero aquí e instalar un Windows nuevo, reinstalar docenas de paquetes de software, intentar y recordar docenas de personalizaciones/etc relacionadas con el desarrollo.
Teniendo en cuenta todo eso ... ¿alguien tiene algún consejo útil? Necesito .NET 3.5 - 2.0, ya que soy desarrollador y necesito compilarlo y probarlo.
Gracias!
Quinxy
Realmente aprecio la idea y el comentario. Es una hipótesis muy interesante. Creo que parte de lo que dices no puede aplicarse en este caso, dado que mi programa de demostración que manifiesta este problema es literalmente una línea (con un formulario de proyecto Windows Forms predeterminado) que llama a la función Ping(), y todo funcionó perfectamente antes del problema de disco que tuve. Pero la parte que mencionas sobre la instrumentación puede ser muy importante, en particular porque cuando comparé el registro entre los estados de trabajo y no trabajo noté algunos cambios relacionados con los monitores de rendimiento/etc. –
Así que creo que debería echar un vistazo a los cambios en el registro relacionados con los contadores de rendimiento y ver si el cambio hace algo. –