Vista y ProgramData
-
02-07-2019 - |
Pregunta
¿Cuál es el lugar correcto para almacenar los archivos de datos del programa que son los mismos para todos los usuarios pero deben poder escribirse en el programa? ¿Cuál sería la ubicación equivalente en MS Windows XP? He leído que C: \ ProgramData no se puede escribir después de la instalación por parte de usuarios normales. ¿Es eso cierto? ¿Cómo puedo recuperar ese directorio mediante programación utilizando Platform SDK?
Solución
SHGetFolderPath () con CSIDL de CSIDL_COMMON_APPDATA.
Lea más en http://msdn.microsoft .com / en-us / library / bb762181 (VS.85) .aspx
Si necesita la ruta en un archivo por lotes, también puede usar la variable de entorno% ALLUSERSPROFILE%.
Otros consejos
Aquí hay un gran resumen de las diferentes opciones: http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead -of-program-files.aspx
¿Dónde debo escribir los datos del programa? En lugar de archivos de programa?
Una actualización de código de aplicación común es esto: " mi aplicación solía escribir Archivos a archivos de programa. Se sentía como un buen lugar para ponerlo como cualquier otro. Tenía el nombre de mi aplicación en Ya, y porque mis usuarios eran administradores, funcionó bien. Pero ahora veo que este no sea un gran lugar pegar las cosas como alguna vez pensé, Porque con UAC incluso Administradores Ejecutar con privilegios estándar de usuario la mayor parte del tiempo Entonces, ¿dónde debería poner mis archivos en su lugar? "
En realidad SHGetFolderPath
está en desuso.
SHGetKnownFolderPath
debería usarse en su lugar.
Puedes usar:
CString strPath;
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE);
Consulte el El artículo de Raymond Chen sobre esta pregunta específica .
En resumen, estás pidiendo un agujero de seguridad .