Je cherche un bon moyen d'obtenir le dossier de données d'application local pour un utilisateur spécifique - sans avoir à entrer les informations de connexion pour cet utilisateur.SHGetFolderPath() pour un utilisateur spécifique
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 l'docs ce n'est pas pris en charge sur < = Windows 2000.
Le registre clé HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folder contient la valeur AppData, qui contient l'emplacement le dossier appdata local pour l'utilisateur courant ... donc je pourrais 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 j'ai entendu dire que cela peut parfois être inexact. Ironiquement, sous Windows, un compte d'administrateur peut facilement accéder et modifier toutes les données du dossier appdata de n'importe quel utilisateur, si elles ouvrent simplement Explorer et naviguent vers l'emplacement correct ... mais il ne semble pas y avoir de un moyen facile d'obtenir par programme l'emplacement du dossier appdata pour un utilisateur spécifique.
Alors, ai-je d'autres options? À l'heure actuelle, l'accès au registre (gasp) semble être la meilleure option, mais j'aimerais utiliser quelque chose d'officiel et non découragé par Microsoft, si possible.
Toutes les suggestions seraient appréciées.
Impressionnant. J'ai vu la fonction RegLoadKey(), et envisagé de l'utiliser ... mais à ce moment je n'étais pas sûr qu'il serait capable de faire ce que je voulais sans être ridiculement lent et peu fiable. Cependant, votre réponse m'a donné l'inspiration pour l'essayer. On dirait que je peux faire ce travail ... ce n'est pas aussi lent que je le pensais. Espérons que cela fonctionnera sans accroc pour le client qui veut cette fonctionnalité. Ils ont beaucoup d'ordinateurs utilisant des services AD/terminaux, et probablement des profils d'utilisateurs itinérants. RegConnectRegistry() pourrait être utile plus tard. – beepboopbopbop
Si la vitesse de RegLoadKey est un problème, vous pourriez probablement chercher dans HKEY_USERS pour le SID de l'utilisateur, ce qui vous sauverait l'appel RegLoadKey, mais cela ne fonctionne que pour les profils qui sont déjà chargés. – Anders