Question

Je suis à la recherche d'un bon moyen pour obtenir le dossier de données d'application locale pour un utilisateur spécifique -. Sans avoir à entrer les informations de connexion pour cet utilisateur

SHGetFolderPath () peut accepter un jeton d'accès pour tout utilisateur que je veux obtenir le dossier AppData local, mais pour obtenir un jeton d'accès, vous devez fournir le mot de passe de l'utilisateur. En outre, selon le docs ce n » t pris en charge sur <= Windows 2000.

La clé de Registre HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folder contient la valeur AppData, qui contient l'emplacement du dossier AppData local pour l'utilisateur en cours ... donc je pourrait techniquement monter la ruche HKCU pour l'utilisateur spécifique et accéder à cette valeur; Cependant, Microsoft semble décourager fortement l'utilisation de cette clé, et je l'ai entendu dire qu'il peut parfois être inexactes aussi bien.

Ironie du sort, sous Windows, un compte administrateur peut facilement accéder et modifier toutes les données dans le dossier AppData de tout utilisateur, si seulement ils ouvrent Explorer et accédez à l'emplacement correct ... mais il ne semble pas être un moyen facile d'obtenir l'emplacement du programme du dossier AppData pour un utilisateur spécifique.

Alors dois-je d'autres options? En ce moment, l'accès au registre (GASP) semble être la meilleure option, mais je voudrais utiliser quelque chose officiel et non découragé par Microsoft, si possible.

Toutes les suggestions seraient appréciés.

Était-ce utile?

La solution

Il n'y a aucun moyen documenté pour le faire sans jeton autant que je sache, mais votre meilleur pari est à:

  1. Trouvez le profil: HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList (% windir% \ Profiles sur Win9x)
  2. AdjustTokenPrivileges pour SE_RESTORE_NAME
  3. RegLoadKey NTUSER.DAT (USER.DAT sur 9x)
  4. Requête ... \ CurrentVersion \ Explorer \ User Shell Folders

Notez que la clé de Registre correcte est de vérifier les dossiers et non des dossiers Shell Shell utilisateur (Et vous pourriez avoir à étendre le chemin), voir la longue et triste histoire de la clé Shell Folders pour plus de détails

Je tiens également à souligner que, si possible, vous devez stocker les données dans programfiles ou les dossiers communs, puis copier dans le profil lorsque votre programme est exécuté pour la première fois pour chaque utilisateur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top