Comme indiqué dans Écriture du fichier de configuration dans C:\Program Files (x86)\MyApp\myapp.cfg, par rapport au privilège administrateur , ce n'est pas une bonne idée d'écrire un fichier de configuration dans C:\Program Files (x86)\MyApp\myapp.cfg
.
Au lieu de cela, mon logiciel enregistre maintenant ses données dans un sous-répertoire de %ALLUSERSPROFILE%
(Ex: C:\ProgramData\MyApp\myapp.cfg
Sur Win7)
[J'utilise myfile = open(filename, 'a')
dans Python pour ce faire.]
Je rencontre maintenant un problème avec ce fichier:
User A
Et l'ai exécuté, puis le fichier C:\ProgramData\MyApp\myapp.cfg
A été écrit.User B
, Et j'ai de nouveau exécuté mon logiciel: maintenant une erreur s'affiche: User 2
N'a pas le droit d'écrire C:\ProgramData\MyApp\myapp.cfg
(Permission denied
). Pourquoi? %ALLUSERSPROFILE%
N'est-il pas un endroit qui peut être écrit par tous les utilisateurs? Comment résoudre ce problème?
Non, C:\ProgramData
, alias FOLDERID_ProgramData
, a des paramètres de sécurité restreints. Les utilisateurs standard peuvent y créer des fichiers. Mais ces fichiers sont, par défaut, sécurisés afin que seul l'utilisateur qui a créé le fichier puisse le modifier ultérieurement.
La solution recommandée consiste pour votre installateur à créer un sous-répertoire de C:\ProgramData
pour votre stockage partagé. Et ce sous-répertoire doit recevoir une ACL permissive par le programme d'installation. C'est ce qui accorde l'accès souhaité à tous les utilisateurs standard.
Je me demande si vous avez vraiment besoin de données partagées accessibles en écriture. Normalement, je m'attendrais à voir la configuration partagée être quelque chose qui est spécifié au moment de l'installation et modifié rarement par les administrateurs. La plupart des données de configuration ont tendance à être par utilisateur.
Je voudrais ajouter à cela, car j'avais également des problèmes d'écriture dans C:\ProgramData. Mon problème a fini par être que mon répertoire/fichiers dans C:\ProgramData ont été écrits par un administrateur. Lorsque mon application s'exécutait sous un utilisateur normal, elle ne pouvait pas y écrire, donc Windows utilisait automatiquement C:\Users\fooface\AppData\Local\VirtualStore\ProgramData à la place. J'ai trouvé le chemin vers lequel il écrivait en utilisant Process Monitor sur mon application. Après avoir vu cela, j'ai supprimé les fichiers de C:\ProgramData et exécuté à nouveau mon application et elle y a écrit comme prévu.
J'espère que cela aide quelqu'un.