¿Por qué los archivos se colocan en " C: Users AppDataLocalVirtualStoreProgram Files (x86)"?


Recientemente actualizé mi aplicación Visual Basic 6.0 y ahora incluyo un exe.archivo de manifiesto para evitar la virtualización de UAC. Después de aplicar esta actualización, algunos usuarios no pueden encontrar sus archivos de datos (Access archivos MDB) y después de una búsqueda del sistema terminan encontrándolo en C:\Users\<username>AppData\Local\VirtualStore\Program Files(x86).

¿Para qué sirve esta área de carpetas y cómo y cuándo se mueven los archivos a esta área? ¿Cómo lo prevenimos? Espero que ahora que mi aplicación usa un .manifest esto no vuelva a suceder. Hizo los archivos obtener colocado allí antes de que el manifiesto se utilizó como la aplicación se estaba colocando en la virtualización de UAC?

Author: Peter Mortensen, 2010-07-10

2 answers

Mi conjetura es que su manifiesto dice asInvoker, y que su aplicación intenta escribir en Archivos de programa. Cuando los usuarios lo ejecutaron sin un manifiesto, escribió a la tienda virtual para Archivos de programa, que es la ruta donde encontraron algunos archivos más tarde. Cuando se ejecutaron con un manifiesto, no se pudo escribir en absoluto (con acceso denegado), pero o bien su aplicación ocultó el error de ellos, o no entendieron el error por lo que no se lo mencionaron a usted.

Solución a corto plazo-usar a Requiere manifiesto del administrador. Esto irritará a los usuarios, pero las escrituras tendrán éxito. Solución a largo plazo-no escribir en archivos de programa. Hay mejores opciones por usuario, como AppData.

 6
Author: Kate Gregory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-11 02:11:31

Una aplicación que no se está ejecutando con privilegios elevados no debería tener acceso a los directorios Program Files y Program Files (x86). Esto es bueno para la seguridad. Además, en la mayoría de los casos cuando un desarrollador le dice a su programa que guarde datos en la carpeta Program Files, por ejemplo, configuración del programa, se ha olvidado por completo de que la configuración del programa debe ser una cosa por usuario! Es decir, cada usuario en el equipo local debe ser capaz de utilizar el programa sin afectar a los otros usuarios. En otras palabras, una aplicación de buen comportamiento debería guardar su configuración en el

C:\Users\<User Name>\AppData\Local\<Manufacturer>\<Product>\<Product Version> 

Directorio.

Por ejemplo, mi software AlgoSim escribe a

C:\Users\<User Name>\AppData\Local\Rejbrand\AlgoSim\2.0

Por supuesto, el

C:\Users\<User Name>\AppData\Local\

La ruta debe buscarse dinámicamente en tiempo de ejecución. Use

SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, 0, SHGFP_TYPE_CURRENT, @path);

Para esto.

Desde Windows Vista, las aplicaciones que no se ejecutan con privilegios elevados que intentan escribir en la carpeta Program Files (o Program Files (x86)), de hecho, escribirán en la carpeta VirtualStore, sin saberlo. Microsoft pensó que esto sería mejor que un fallo del programa (causado por la restricción de acceso). Y de hecho, gracias a esto, la mayoría de los programas antiguos que guardan sus configuraciones en la carpeta Program Files continuarán trabajando con Windows Vista+, y cada usuario obtendrá sus propias configuraciones, como un bono, a pesar de que el fabricante original del software no pensó en esto.

Puede usar un manifiesto para decirle a Windows que su aplicación es consciente de VirtualStore y que Windows no debe cambiar ninguno rutas durante el tiempo de ejecución. Pero si realmente quieres poder escribir en la carpeta Program Files, entonces creo que tienes que ejecutar la aplicación con privilegios elevados, cada vez, lo cual es desaconsejable en general.

Los detalles sobre cómo crear manifiestos para hacer que su programa muestre el indicador UAC en cada ejecución, y cómo deshabilitar VirtualStore, se han abordado en varias preguntas anteriores de desbordamiento de pila. No dude en utilizar el cuadro de búsqueda!

 33
Author: Andreas Rejbrand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-14 12:30:48