2011-08-04 4 views
1

Dans mon programme, j'ai utilisé SHGetFolderPath pour obtenir le chemin AppData. Cependant, j'ai besoin d'obtenir le chemin AppData des autres utilisateurs sur l'ordinateur. La seule façon que je peux penser à le faire est d'obtenir le chemin pour l'utilisateur actuel, puis remplacer le nom de l'utilisateur actuel avec les noms des autres utilisateurs. Je ne sais pas comment obtenir une liste des utilisateurs. Il y a probablement une solution beaucoup plus élégante aussi ... Si vous avez un aperçu je l'apprécierais grandement.C++ get appdata chemin des autres utilisateurs

+1

Pourquoi avez-vous besoin de ça? Vous n'avez pas accès à ces dossiers, sauf si vous utilisez tous les privilèges (et vous devez avoir une bonne excuse pour cela). –

+0

Je ne peux pas penser à une bonne raison de le faire. Cela ne semble pas très robuste. –

+0

Dans les versions précédentes de mon programme, j'avais le fichier de configuration dans l'appdata. Je le déplace dans Program Files dans la nouvelle version afin que tous les utilisateurs puissent partager les sauvegardes. Si possible (si l'utilisateur actuel) a les droits, je voudrais le faire pour tous les utilisateurs. – Lienau

Répondre

1

Pour votre situation, je recommande ce qui suit:

  1. Continuer les fichiers de configuration du magasin dans AppData, mais le stocker dans CSIDL_COMMON_APPDATA (SHGetFolderPath). Cette AppData est partagée avec tous les utilisateurs. Votre programme d'installation (ou un utilisateur administrateur) peut configurer un dossier à cet emplacement nommé d'après votre programme qui donne un accès complet à "Tout le monde" (c'est très facile avec Windows Installer). De cette façon, n'importe quel utilisateur peut lire/écrire dessus. Tout dans "Program Files" ne devrait jamais changer. Il ne doit contenir que des exécutables en lecture seule, des DLL et d'autres ressources de ce type. Microsoft a longtemps découragé l'écriture à cet emplacement et de nombreux administrateurs ne s'attendent plus à rencontrer des données utilisateur personnalisées qui nécessitent une sauvegarde régulière & dans Program Files. Lorsque votre logiciel s'exécute, vous pouvez vérifier les données dans l'AppData de l'utilisateur actuel (c'est-à-dire stocké par votre ancienne version) et les fusionner avec les données dans AppData de la machine (décrit par # 1 ci-dessus). Pour migrer les données de l'utilisateur, connectez-vous en tant qu'utilisateur et exécutez votre logiciel.

Il n'y a vraiment pas de bonne façon de rassembler toutes ces données provenant d'autres profils utilisateur. Rien soutenu par Microsoft, c'est (que je suis au courant!). En ce qui concerne le stockage des données dans les fichiers programmes: http://msdn.microsoft.com/en-us/library/bb776776(VS.85).aspx "Ne pas stocker les données utilisateur dans le dossier Program Files." Il y a beaucoup d'autres références qui disent similaires.

Questions connexes