2010-07-16 9 views
3

Je stocke actuellement un fichier XML sérialisé dans le répertoire de l'application qui contient toutes les modifications spécifiques à l'opération du programme (configuration système ou utilisateur non typique). Il y a quelques semaines, nous avons commencé à rencontrer des problèmes de sauvegarde (lisez my previous question à ce sujet). En bref, nous avons finalement découvert que Windows 7 (et parfois Vista) a un problème avec l'écriture dans le répertoire de l'application (en particulier tout sous Program Files). Maintenant, s'il s'agissait d'un fichier de configuration normal, je le stockerais simplement sous le dossier APPDATA de l'utilisateur, mais ce n'est pas normal. Nous faisons cela sur notre propre instrumentation, et les erreurs de configuration représentent 99% de la raison pour laquelle les clients ont des problèmes avec notre logiciel. Nous avons donc besoin que ce fichier soit accessible pour qu'il puisse facilement le trouver et nous l'envoyer par courriel. Appdata est assez difficile à trouver pour les utilisateurs expérimentés, et encore moins pour les non-technologues.Où stocker les fichiers de configuration personnalisés

Nous avons également essayé de l'exécuter en tant qu'administrateur, et en rendant les autorisations de dossiers ouvertes (nous contrôlons tous les ordinateurs sur lesquels il s'exécute, il ne fonctionnera jamais sur la machine d'un individu aléatoire). Mais, cela fonctionne parfois, et parfois non. Le pire est que lorsque j'écris le fichier, il ne lance même pas une erreur; il l'écrit simplement dans un répertoire temporaire qui expire à un moment inconnu. Quelques semaines plus tard, notre utilisateur aura un problème, et le fichier de configuration est complètement foiré. Donc, ma question est où dois-je stocker ce fichier, sinon dans Program Files? Devrais-je tout simplement le mettre dans APPDATA de toute façon, et faire un petit utilitaire qui nous l'envoie automatiquement en cas de problème? Ou puis-je le laisser dans Program Files, mais modifier une autorisation spécifique ou une clé de registre pour lui permettre de fonctionner normalement?

+0

AppData est l'endroit pour cela. Voir aussi ma réponse http://stackoverflow.com/questions/3219255/why-do-files-get-placed-c-users-usernameappdata-local-virtualstore-program-fil/3219276#3219276 –

+1

Je sais que c'est le bon endroit , mais comment puis-je obtenir des utilisateurs technologiquement analphabètes pour nous envoyer le fichier en cas de problème? – drharris

+0

@ 0xA3 Idéalement, je pourrais corriger tous les bogues dans notre logiciel ainsi que les vendeurs de matériel 9-12 et les pilotes que nous utilisons dans notre logiciel, mais je ne poserais pas cette question. ;) Lorsque les utilisateurs envoient ce fichier de configuration, je suis capable de gérer tous les cas qui causent un problème, mais beaucoup de choses que nous ne pouvons pas prévoir. Par exemple, définir le paramètre d'un périphérique sur 256 a provoqué un débordement, même si le pilote et les pinvokes ont montré qu'il devrait aller jusqu'à 65k. Le botteur est que 257 a bien fonctionné. – drharris

Répondre

1

Cela dépend si l'utilisateur doit modifier le fichier directement ou non. Sinon, vous devez les mettre en% APPDATA%, que vous pouvez accéder via:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

Sinon, vous pouvez le mettre dans Mes documents:

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 

De toute façon, le mettre dans Program Files ce n'est pas une bonne idée. Comme vous l'avez découvert, il existe des problèmes d'autorisation, même si vous êtes en cours d'exécution en tant qu'administrateur.

+0

L'utilisateur devra en effet le modifier de temps en temps directement. Je n'ai même pas pensé à le mettre dans Mes Documents ... Normalement, ce serait une idée absurde, mais puisque ces ordinateurs sont contrôlés par nous, ce sera une solution parfaitement acceptable. – drharris

1

Pour ces utilisateurs, vous pouvez créer un bouton permettant d'ouvrir ce répertoire. Vous pourriez le mettre dans un endroit discret que vous pourriez les diriger plus tard.

Pour les utilisateurs qui ont un client de messagerie sur leur boîte, vous pouvez avoir un bouton qui créerait un nouvel email avec le sujet et attacher automatiquement le fichier à l'email.

Questions connexes