Vista et ProgramData
-
02-07-2019 - |
Question
Quel est le bon endroit pour stocker des fichiers de données de programme identiques pour tous les utilisateurs mais devant être inscriptibles pour le programme? Quel serait l'emplacement équivalent sur MS Windows XP? J'ai lu que C: \ ProgramData n'est pas accessible en écriture après l'installation par des utilisateurs normaux. Est-ce vrai? Comment puis-je récupérer ce répertoire par programme à l'aide du Kit de développement Platform SDK?
La solution
SHGetFolderPath () avec le CSIDL de CSIDL_COMMON_APPDATA.
Pour en savoir plus, consultez la http://msdn.microsoft. .com / fr-us / library / bb762181 (VS.85) .aspx
Si vous avez besoin du chemin d'accès dans un fichier de commandes, vous pouvez également utiliser la variable d'environnement% ALLUSERSPROFILE%.
Autres conseils
Il existe un bon résumé des différentes options ici: http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead -of-programme-fichiers.aspx
Où devrais-je écrire les données du programme Au lieu de Program Files?
Une mise à jour commune du code de l'application est ceci: "mon application écrivait fichiers pour programmer des fichiers. C'était comme aussi bon endroit pour le mettre comme tout autre. Il y avait le nom de mon application sur déjà, et parce que mes utilisateurs étaient admins, cela a bien fonctionné. Mais maintenant je vois que cela peut ne pas être un aussi bon endroit coller les choses comme je le pensais, car avec UAC même les administrateurs exécuter avec les privilèges standard d'utilisateur la plupart du temps. Alors, où devrais-je mettre mes fichiers à la place? "
En fait, SHGetFolderPath
est obsolète.
Vous pouvez utiliser:
CString strPath;
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE);
Voir l'article de Raymond Chen sur cette question spécifique .
En bref, vous demandez un trou de sécurité .