Como siempre he dicho en anteriores artículos relacionados, escribir sobre alguna solución de un problema en Windows, es de lo que más me gusta hacer aquí, pues afrontar algo así, es la mayor fuente de conocimiento que uno puede tener.
Uno de los tipos de problemas más frecuentes con respecto a aplicaciones en Windows, suelen ser los misteriosos mensajes de error, que en algunas veces dicen mucho, pero otras veces, puede ser una excepción no controlada, y por ende, el mensaje no dirá nada. Gran parte de estos errores se pueden subsanar, pues muchos son causados por operaciones incorrectas que hace la aplicación sobre la actual versión del sistema operativo, o bien como en este caso específico, hay problemas de permisos.
Para fortuna de nosotros, Microsoft tiene una cantidad de herramientas y soluciones gratuitas que nos ayudarán a dar una luz a nuestro problema; entre las que más destaco, están: Sysinternals Suite y Application Compatibility Toolkit, incluida en el ADK de Windows 8. Lo más interesante, es que aunque lo ideal siempre es el conocimiento, no es extricatmente necesario tener un grado muy alto para que estas herramientas nos puedan ayudar.
El problema
Regularmente al instalar Windows, vario entre VMware Workstation y Hyper-V, pero también instalo siempre Visual Studio, que hoy por hoy está en versión 2012. VMware tiene unos componentes adicionales para Visual Studio que se pueden agregar mientras se instala la plataforma.
Lo extraño de todo esto, es que después de instalar Visual Studio y VMware con sus respectivos componentes, cada que intentaba abrir la plataforma de desarrollo, estaba recibiendo este mensaje de error:
“An error has ocurred while trying to access the log file. Logging may not function properly.”
Cuando hacía clic en el botón OK (Aceptar), Visual Studio seguía su camino sin ningún problema, pero se empezaba a volver bastante molesto tener que aceptar el mensaje cada vez que se ejecutara la suite de desarrollo.
La causa
Claramente, el complemento de VMware para Visual Studio no podía leer o escribir el archivo de log, lo que no era posible saber, era cuál archivo específico se estaba refiriendo y en qué ruta se encontraba. Para estos casos, donde hay un mensaje de error sin mucho detalle, la mejor herramienta que podemos utilizar es Process Monitor de Sysinternals.
Como Process Monitor detecta todo evento que está sucediendo en el sistema, es normal que no sepamos en estos casos por dónde empezar con millones de resultados en la traza. Para este problema, utilicé una de las características de Process Monitor que permite filtrar por categoría y resultado. Para esto, basta con ir al menú de Tools y seleccionar Count Ocurrences:
Despues de esto, Seleccionar Result dentro del menú desplegable para asegurarnos que son los resultados los que se nos mostrarán y después darle al botón de Count.
Los resultados que yo tuve, se veían así:
Una de las principales causales para este tipo de errores, suelen ser los inconvenientes con permisos NTFS en el sistema operativo, así que el resultado de ACCESS DENIED es bastante útil. Lo que yo hice, fue darle doble clic para que Process Monitor inmediatamente hiciera el filtro por todos los resultados en los que haya recibido como respuesta ACCESS DENIED.
Aunque hubo varios resultados, uno en específico fue el que me llamó la atención:
Como pueden ver en la captura, el nombre del proceso era devenv.exe, perteneciente a Visual Studio, lo que me decía que ocurría este evento mientras estaba en ejecución; lo otro, es que según Path, era un .log el que se estaba tratando de crear (Utilizando la operación de CreateFile), dentro de una carpeta temporal del usuario, pero más interesante aún, es que pertenecía a VMware. El nombre en cuestión era: vmware-vsid-1.log. Para estar más seguro, desde Process Monitor, hice clic derecho a la ruta y seleccioné Jumpt to, que permite navegar hasta el directorio automáticamente, y esto fue lo que vi:
El archivo sí estaba creado dentro del directorio, lo que indicaba que el problema quizá no estaba en su primera creación, sino más bien en la sobreescritura que hacía al iniciar Visual Studio. Para asegurarme de esto, hice clic derecho en el archivo, fui a Propiedades y finalmente a la pestaña de Seguridad para ver cómo estaban los permisos, y esto me encontré:
Windows me indicaba que no tenía permisos de lectura. Si mi usuario (Checho) no podía siquiera leer el contenido, no iba a poder hacer ningún tipo de escritura u operación básica sobre el archivo.
La solución
Ya sabiendo el problema, podía intentar dos cosas, darle los permisos al archivo para que el proceso de Visual Studio pudiera escribir en él, o como era un log, simplemente eliminarlo y esperar a ver qué sucedía al momento de crearse.
Opté por la segunda y lo quité, para posteriormente ejecutar Visual Studio y para mi fortuna, ¡No más mensaje molesto de error!
Al volver a resisar los permisos, todo había cambiado:
Uno más, gracias a Process Monitor.
Saludos,
Checho