Esta es la primera vez que hago una pregunta sobre superusuario (aunque me refiero con frecuencia a desbordamiento de pila y superusuario), así que tengan paciencia si cometo algún error o no tengo clara mi pregunta, corregiré cualquier error o lo aclararé según sea necesario.
Desarrollé una aplicación, digamos MyApp, y creé un instalador que instala el ejecutable principal con sus dependencias relacionadas (carpetas y archivos) en su propia carpeta dedicada en formato C:\Program Files (x86)\MyAppFolder\
.
El problema es que durante el tiempo de ejecución se supone que debe crear archivos como registros y más en su propio directorio, la MyAppFolder
carpeta. Después de investigar un poco, pensé que es porque no se está ejecutando como administrador (mi usuario es un administrador para su información), o más bien, es porque solo los administradores pueden escribir en \Program Files
, supongo. Si ejecuto mi aplicación como administrador, puedo escribir los archivos y carpetas necesarios.
Pero, ¿no debería idealmente una aplicación poder escribir en su propia carpeta? ¿Incluso si no se ejecuta con privilegios de administrador? ¿Que me estoy perdiendo aqui?
Gracias de antemano.
Respuesta1
En Windows no existe el concepto de "carpeta propia del programa".
El concepto que existe es "carpeta actual del programa", que por defecto es la carpeta desde la que se ejecutó. Los permisos que posee el programa provienen de la cuenta de usuario que lo inició, no de donde se encuentra.
Esto significa que cuando el programa se ejecuta desde Archivos de programa, de forma predeterminada se ejecuta en su cuenta y no como Administrador. Por lo tanto, no tiene permiso para escribir en la carpeta donde se encuentra.
Tendría sentido que el programa escribiera su(s) archivo(s) en una carpeta no protegida. El lugar habitual es crear tu propia carpeta dentro
C:\Users\USERNAME\AppData\Local
, también disponible en la variable de entorno %LOCALAPPDATA%
, pero puede estar en cualquier lugar que elijas.