2008-09-25 16 views
14

Quel est le bon endroit pour stocker les fichiers de données de programme qui sont les mêmes pour chaque utilisateur, mais doivent être accessibles en écriture pour le programme? Quel serait l'emplacement équivalent sur MS Windows XP? J'ai lu que C: \ ProgramData n'est pas inscriptible après l'installation par des utilisateurs normaux. Est-ce vrai? Comment puis-je récupérer ce répertoire par programmation en utilisant le Kit de développement Platform SDK?Vista et ProgramData

Répondre

8

SHGetFolderPath() avec CSIDL de CSIDL_COMMON_APPDATA.

En savoir plus sur http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx

Si vous avez besoin du chemin d'accès dans un fichier de commandes, vous pouvez également utiliser le% ALLUSERSPROFILE% variable d'environnement.

+1

Je crois que c'est en fait% ALLUSERSPROFILE%, avec un S –

+0

Err, oui, c'est correct, j'ai manqué un S. :-) –

1

Vous pouvez utiliser:

CString strPath; 
::SHGetSpecialFolderPath(NULL, strPath.GetBuffer(1024), CSIDL_COMMON_APPDATA, FALSE); 
1

Voir Raymond Chen's article on this specific question.

En bref, vous demandez un trou de sécurité .

+3

L'application ne sera pas utilisée par les administrateurs et tous ceux qui peuvent se connecter à l'ordinateur sont de confiance dans les entreprises avec lesquelles nous traitons. Ce n'est donc pas un problème de sécurité d'avoir des données partagées entre les utilisateurs. Sur Vista, vous pouvez partager des photos et des films dans un dossier public. Les progams devraient l'avoir aussi. – frast

7

Il y a un grand résumé des différentes options: http://blogs.msdn.com/cjacks/archive/2008/02/05/where-should-i-write-program-data-instead-of-program-files.aspx

Où devrais-je écrire Programme des données au lieu de fichiers de programme?

Une mise à jour du code d'application commune est ceci:. « Mon application utilisée pour écrire fichiers pour programmer des fichiers C'était comme aussi bon endroit pour le mettre comme tout autre Il avait le nom de mon application sur déjà. , et parce que mes utilisateurs étaient admins, cela a fonctionné très bien. Mais maintenant je vois que ce n'est peut-être pas un endroit aussi génial pour coller les choses comme je l'ai déjà pensé, car avec UAC même les administrateurs fonctionnent avec les privilèges standard de l'utilisateur Alors, où devrais-je mettre à la place? "

4

Actuellement, SHGetFolderPath est obsolète.

SHGetKnownFolderPath doit être utilisé à la place.

+0

Si j'utilisais SHGetKnownFolderPath, mon logiciel ne fonctionnerait que sous Windows Vista. SHGetFolderPath fonctionne depuis Windows 2000 et Vista aussi. – frast

+0

@frast, oui, mais vous pouvez vérifier la disponibilité de SHGetKnowFolderPath et l'utiliser si elle se termine. (Avec LoadProc ou quel que soit son nom ...) Alors votre application sera à l'épreuve du futur et travaillera sur les versions de Windows où SHGetFolderPath est supprimé, ainsi que sur Windows 2000. –

+1

@Amigable Je le ferais, mais j'attends jusqu'à ce que je vois un Version Windows qui ne prend pas en charge SHGetFolderPath. – frast