Pourquoi les paramètres de l'application sont-ils en lecture seule dans l'application.config?

J'ai quelques paramètres dans mon application.config que j'ai l'intention d'être "global" - ie. tout utilisateur peut les modifier, et tous les utilisateurs obtiennent le même paramètre.

Mais à moins que je ne les change pour être des paramètres utilisateur, ils sont en lecture seule.

Pourquoi est-ce?

Et comment dois-je conserver les paramètres globaux de mon application?

Modifier:

Il s'agit en fait d'une application de service windows qui s'exécute en tant que service en tant que LocalSystem. Il peut également être exécuté manuellement par un administrateur local avec argument "/config", qui lance un formulaire windows pour modifier les valeurs de configuration.

Il aura donc un accès en écriture à %PROGRAMFILES% dans les deux situations.

La façon dont j'accède à mes paramètres est donc:

Settings.Default.MySetting = MyNewValue;

Et lorsque MySetting est défini sur Application (dans les propriétés de mon projet, Paramètres.paramètres), je reçois une erreur de compilation "MySetting est en lecture seule".

Je suis nouveau à ce genre de choses, et n'ont pas encore trouvé une très bonne explication de la façon dont il est censé être fait. Par exemple, pourquoi dois-je dire "par défaut", et qu'est-ce que cela signifie réellement? Aucune idée. Si quelqu'un peut me diriger vers une application.tutoriel d'utilisation de configuration, ce serait vraiment utile.

23
demandé sur Blorgbeard 2009-04-17 03:04:48

6 réponses

La vraie réponse complète:

L'application.les paramètres de configuration sont en lecture seule car il existe 2 types de paramètres:

  1. Paramètres De L'Application
  2. Paramètres Utilisateur

Le premier ne changera pas à moins que l'éditeur de l'application n'en publie une nouvelle version. La seconde n'est pas stockée dans l'application.config, mais dans un utilisateur.fichier de configuration. Dans l'abscence de cet utilisateur.fichier de configuration de l'application.config fournit la valeur par défaut.

Si MySetting est un utilisateur Réglage:

Settings.Default.MySetting = MyNewValue;
Settings.Default.Save();

, Il va créer un user.config fichier à [User Local Settings Application Data]\[company name]\[application].exe[hash string]\[version] avec les nouveaux paramètres, et ces paramètres prévalent sur les paramètres de la app.config fichier.

53
répondu Jader Dias 2009-10-20 01:04:58

Pourquoi: les paramètres de L'Application sont destinés à être stockés dans le dossier de L'Application sous Program Files où l'utilisateur n'a pas de privilèges d'écriture.

Comment: Il n'y a pas de support par défaut pour "tous les utilisateurs" mais vous devriez être en mesure de configurer votre propre fichier de configuration personnalisé dans un dossier public ou utiliser une base de données.

4
répondu Henk Holterman 2009-04-16 23:17:13

En termes simples: il N'y a pas d'emplacement sur une machine que tout le monde peut changer, sauf si vous donnez des privilèges pour le faire.

Il y a plusieurs façons de faire face à ce genre de situation:

  • Vous pouvez créer un fichier de configuration / certains paramètres du registre, mettre cela dans le profil" tous les utilisateurs "et accorder à" tout le monde " les droits de modifier ce fichier spécifique. Pendant l'installation, vous pouvez automatiser la procédure d'octroi des privilèges appropriés et votre programme peut gérer le reste.

  • Vous pouvez utiliser UAC pour vous assurer que l'utilisateur actuel dispose des privilèges appropriés pour modifier un paramètre à l'échelle du système. Ceci est l'approche recommandée, mais signifie également que tout le monde ne peut pas modifier des paramètres spécifiques.

  • Vous pouvez utiliser une base de données partagée et stocker vos paramètres là.

  • ???

Je ne recommande pas de changer les éléments dans le répertoire program files ou de changer les privilèges par défaut.

Modifier: En tant que système local, vous avez en effet des privilèges d'écriture dans le répertoire program files. Si vous obtenez l'erreur "lecture seule", cela signifie que les paramètres eux-mêmes sont en lecture seule. Vous devrez utiliser le gestionnaire de configuration pour pouvoir modifier les paramètres dans les fichiers de configuration.

J'espère que cela aide.

3
répondu Jeroen Landheer 2009-04-17 02:21:25

Pas tout à fait sûr de ce que vous voulez dire ici. Voulez-vous dire que vous avez autorisé les utilisateurs à modifier l'application.config de L'interface utilisateur et les changements ne sont pas persistants?

Avez-vous appelé

ConfigurationManager.RefreshSection("appSettings");

Et

Configuration.Save();
1
répondu oscarkuo 2009-04-16 23:11:36

Une raison est que l'application.le fichier de configuration se trouve dans le dossier de votre application sous le répertoire Program Files, et tout dans Program Files est en lecture seule pour les utilisateurs standard par défaut.

Un autre est cette application.paramètres de configuration s'appliquent à l'échelle du système. Si un utilisateur fait un changement, il aura un impact sur d'autres utilisateurs. Les utilisateurs normaux ne sont pas censés être en mesure de faire ce genre de changement. Tout ce qui peut avoir un impact sur plusieurs utilisateurs doit être défini uniquement par un administrateur système. Les paramètres par utilisateur appartiennent à chaque dossier de données D'application de l'utilisateur.

0
répondu Joel Coehoorn 2009-04-16 23:12:24

Les paramètres de Configuration sont mis en cache dans la mémoire lorsque vous démarrez l'application. vous pouvez traiter avec l'application.fichier de configuration xml pour modifier les valeurs.

0
répondu Khaled Musaied 2009-04-16 23:14:27