Pregunta

Estoy buscando una buena manera de conseguir el local de la carpeta de datos de aplicación para un usuario específico, sin tener que entrar en los detalles de inicio de sesión para el usuario.

SHGetFolderPath() puede aceptar un token de acceso para cualquier usuario quiero conseguir el local de la carpeta appdata, pero para obtener un token de acceso, usted tiene que proporcionar la contraseña del usuario.También, de acuerdo a la docs este no es compatible con <= Windows 2000.

La clave del registro HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Carpeta contiene la AppData valor, que contiene la ubicación de los locales de la carpeta appdata para el usuario actual...así que técnicamente podría montar el HKCU de la colmena para el usuario específico y tener acceso a este valor;sin embargo, Microsoft parece no recomendamos el uso de esta clave, y he oído que en ocasiones puede ser inexacta así.

Irónicamente, en Windows, un administrador de la cuenta puede fácilmente acceder y modificar todos los datos de cualquier usuario de la carpeta appdata, si se acaba de abrir el Explorador y vaya a la ubicación correcta...pero no parece ser una manera fácil de obtener mediante programación la ubicación de la carpeta appdata para un usuario específico.

Así que, ¿tengo alguna otra opción?Ahora, el acceso al registro (gasp) parece que la mejor opción, pero me gustaría usar algo oficial y no se desanima por Microsoft, si es posible.

Cualquier sugerencia se agradece.

¿Fue útil?

Solución

No hay manera documentada a hacer esto sin el token que yo sepa, pero lo mejor es:

  1. Busque el perfil: HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList (% windir% \ Profiles en Windows 9x)
  2. AdjustTokenPrivileges de SE_RESTORE_NAME
  3. RegLoadKey NTUSER.DAT (USER.DAT en 9x)
  4. Consulta ... \ CurrentVersion \ Explorer \ User Shell Folders

Tenga en cuenta que la clave de registro correcta para comprobar es User Shell Folders y no Shell Folders (Y puede que tenga que ampliar la ruta), consulte la larga y triste historia de la clave Shell carpetas para obtener más información

También quiero señalar que si es posible, debe almacenar los datos en las carpetas de programa o comunes y luego copiar en el perfil cuando el programa se ejecuta por primera vez para cada usuario

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top