Contenido del archivo diferente dependiendo de ejecutar IDE "como administrador" o no?


2

En Windows 7, usando el Explorador de Windows, guardé una copia de respaldo del archivo C: \ Archivos de programa \ Microsoft Visual Studio \ VC98 \ ATL \ Include \ ATLCOM.H renombrándolo, y luego copié uno nuevo, archivo ligeramente diferente en su lugar (como ATLCOM.H en ese mismo directorio).

Luego abrí el IDE de Microsoft Visual C ++ 6.0 y compilé mi proyecto (que se basa en ATLCOM.H). Noté que el ejecutable compilado se comportó como si no hubiera realizado mis cambios.

Entonces (para verificar si realmente hice los cambios o no) abrí el archivo desde el IDE. Mis cambios NO estuvieron presentes. Pero si abrí el archivo en otro editor, los cambios ESTÁN presentes. En general, intenté abrir el archivo con cuatro programas separados; a excepción de VC ++ 6.0, mis cambios están presentes cuando el archivo se abre en todos ellos. Además, si hago otro cambio en el archivo desde VC ++ 6.0 y lo guardo, el contenido del archivo aparentemente no se ve afectado cuando se ve desde otros programas, pero si cierro VC ++ 6.0 y lo vuelvo a abrir, el cambio que hice desde dentro de VC ++ 6.0 todavía está ahí. Entonces se está escribiendo en el disco en alguna parte.

Luego descubrí que si inicio VC ++ 6.0 a través de "Ejecutar como administrador", el contenido del archivo se ve (desde VC ++ 6.0) igual que el de los otros programas. Si lo inicio sin "como administrador", son diferentes.

Supongo que tal vez haya algo como Windows (o el IDE) que fusiona dos directorios "reales" separados en un directorio virtual. De manera similar a cómo Windows podría fusionar "C: \ Users \ Public \ Documents" y "C: \ Users \ Bob \ Documents" en lo que parece un único directorio desde el punto de vista del usuario. ¿Y cómo exactamente esa fusión depende de si estoy ejecutando el IDE como administrador o no?

¿Alguien sabe qué está pasando aquí? ¿Hay algunos directorios a los que puedo acceder a través del Explorador de Windows (o un indicador de shell o lo que sea) que me permitan ver realmente los dos archivos reales, en lugar de solo C: \ Archivos de programa \ Microsoft Visual Studio \ VC98 \ ATL \ Incluir? Gracias por adelantado.


¡Parece que la tienda virtual ha vuelto a atacar (como respondió Wes Sayeed)! Entiendo por qué Microsoft creó esa característica, pero seguramente puede causar algunos problemas realmente confusos.
lzam

Respuestas:


4

Su problema es que está utilizando Visual C ++ 6.0. Esa versión de MSVC es antigua. Es probable que tenga un problema con la característica de la Tienda Virtual presente en Windows Vista en adelante.

Esto es lo que está sucediendo:

El programa probablemente esté intentando guardar datos en su propia carpeta en Archivos de programa en lugar de su carpeta de perfil de usuario. En Windows 7, las escrituras en la carpeta Archivos de programa se redirigen silenciosa y transparentemente a la carpeta Tienda virtual en el directorio de su perfil de usuario. Cuando selecciona Ejecutar como administrador, las escrituras a los Archivos de programa se realizan correctamente y esa redirección no ocurre.

Verifique lo siguiente:

Busque en C: \ Users \\ AppData \ Local \ VirtualStore. ¿Ves una ventana de WINDOWS y una de Archivos de programa debajo? Si es así, ¿hay archivos relacionados con VC6.0? Si es así, entonces esto es lo que te está pasando.

Su única solución sería ejecutar siempre como administrador o nunca ejecutar como administrador para que el comportamiento sea siempre coherente. También puede deshabilitar la función VirtualStore desde el editor de directivas de grupo local (ya no se deshabilita cuando apaga UAC como lo hizo en Windows Vista).

Alternativamente, puede actualizar a una versión más nueva de Visual C ++ (que recomendaría altamente porque, como dije, 6.0 es antiguo).


esto me volvió loco ayer, característica increíble de M $
Lluís
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.