J'ai une application qui enregistre ses données sur C:\ProgramData
. Cela signifie que pour tous les utilisateurs, elle utilise les mêmes données. Je veux trouver un moyen pour que différents utilisateurs puissent avoir leur propre espace de données séparé. J'ai utilisé un lien symbolique (jonction de dossiers) pour le créer à %userprofile%\Documents\AppFolder
, et la méthode fonctionne bien sur mon profil utilisateur, mais lorsque j'essaie avec un autre utilisateur, l'application ne fonctionne pas; car elle tente d'accéder à C:\User\User1\Documents\AppFolder
, que l'utilisateur 2 n'a pas accès. Y a-t-il une solution possible pour que différents utilisateurs puissent se lier à différents liens symboliques?
Réponse
Trop de publicités?Vous pouvez utiliser la commande subst
pour mapper une lettre de lecteur vers votre répertoire utilisateur. Les lettres de lecteur créées par subst
sont propres à chaque utilisateur, vous pouvez donc créer le même mappage pour chaque utilisateur, puis créer un lien symbolique vers cette lettre de lecteur. Ou simplement indiquer le lecteur mappé via les paramètres du programme.
Un exemple :
subst v: %userprofile%
mklink /d c:\ProgramData\AppFolder v:\Documents\AppForder
L'inconvénient de cette solution est que les lettres de lecteur mappées ne sont pas persistantes, vous devez donc les recréer à chaque fois qu'un utilisateur se connecte (par exemple, en plaçant un raccourci vers la commande subst
dans %appdata%\Microsoft\Windows\Start Menu\Programs\Startup
). Ou vous pouvez créer un fichier batch qui exécutera subst
puis votre programme.
Une solution alternative est d'exécuter votre programme dans un sandbox (par exemple, Sandboxie). Cela ne fonctionnera pas si le programme tente d'effectuer des opérations de bas niveau (par exemple, l'installation de pilotes ou de services). De plus, vous devrez restaurer les fichiers créés par le programme à partir du sandbox après chaque exécution si vous avez besoin de les utiliser ailleurs.