Una aplicación que no se ejecuta con privilegios elevados no debe 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, la configuración del programa, ha olvidado por completo que la configuración del programa debe ser por usuario. Es decir, todos los usuarios de la computadora local deberían poder usar el programa sin afectar a los demás usuarios. En otras palabras, una aplicación de buen comportamiento debería guardar su configuración en el directorio
C:\Users\<User Name>\AppData\Local\<Manufacturer>\<Product>\<Product Version>
.
Por ejemplo, el software de AlgoSim escribe a
C:\Users\<User Name>\AppData\Local\Rejbrand\AlgoSim\2.0
Por supuesto, el camino
C:\Users\<User Name>\AppData\Local\
debe buscarse en marcha de forma dinámica 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)
) escribirán en la carpeta VirtualStore, sin saberlo. Microsoft pensó que esto sería mejor que una falla del programa (causada 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 funcionando con Windows Vista +, y cada usuario obtendrá su propia configuración, como beneficio adicional, aunque el fabricante original del software no pensó en esto. .
Puede usar un manifiesto para indicar a Windows que su aplicación conoce VirtualStore y que Windows no debe cambiar ninguna ruta durante el tiempo de ejecución. Pero si realmente desea poder escribir en la carpeta Program Files
, entonces creo que debe ejecutar la aplicación con privilegios elevados, todas las veces, lo que es desaconsejable en general.
Los detalles sobre cómo crear manifiestos para hacer que su programa muestre el aviso de UAC en cada ejecución, y cómo deshabilitar VirtualStore, se han tratado en varias preguntas anteriores de desbordamiento de Stack . ¡Siéntete libre de usar la barra de búsqueda!
Corrección a corto plazo del manifiesto "use a requireAdministrator". Er, no, no! –