IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Comment sauvegarder des settings dans le application.config ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut Comment sauvegarder des settings dans le application.config ?
    Bonjour,

    J'ai une application console avec un fichier de config contenant un paramètre d'application "LastLog".
    Ce paramètre contient la date de dernier lancement de l'application.

    Dans mon code, je tente de mettre à jour ce paramètre :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
                    DateTime now = DateTime.Now;
     
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    Console.WriteLine("Début à {0}", DateTime.Now.ToString());
     
                    // Mon traitement qui va bien
                    FaitDesTrucs(Properties.Settings.Default.LastLog, now);
     
                    Properties.Settings.Default["LastLog"] = now;
                    Properties.Settings.Default.Save();
     
                    stopwatch.Stop();
                    Console.WriteLine("Fin à {0}", DateTime.Now.ToString());
                    Console.WriteLine("Durée {0}", stopwatch.Elapsed.ToString());

    Seulement mon fichier app.config ne se met pas à jour.
    Et lorsque je relance le programme, "Properties.Settings.Default.LastLog" a systématiquement toujours la même valeur initiale.

    Je n'ai aucune erreur.

    Voici le contenu de mon fichier de config :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <configSections>
            <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
                <section name="Stations2CSV.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
        </startup>
        <applicationSettings>
            <Stations2CSV.Properties.Settings>
                <setting name="LastLog" serializeAs="String">
                    <value>1900-01-01</value>
                </setting>
            </Stations2CSV.Properties.Settings>
        </applicationSettings>
    </configuration>

    Note : Si je transforme mon paramètre en paramètre "utilisateur", alors ça marche.

    Mais moi je veux que ça reste un paramètre d'application : sa valeur doit bien être la même quel que soit l'utilisateur qui lance le programme...

  2. #2
    Membre éclairé

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    621
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 621
    Par défaut
    Réponse courte : on ne peux pas.

    Le .config se trouve à coté de l'exe dans "C:\Program Files\...."
    Ce dossier est protégé. Une application ne peut pas y écrire sans être lancé en mode administrateur.

    C'est pourquoi les paramètres "Application" sont des paramètres relativement figés (fixés lors du setup, par exemple).

    Il faut même faire attention si on édite ce .config avec notepad.
    Si ce dernier n'est pas lancé en mode administrateur, lors de la sauvegarde, il peut créer une shadow copie quelque par dans c:/users/untel/Appdata et cela peut devenir pire que tout.
    (perso je copie toujours le fichier sur le bureau, je le modifie, et le recopie à sa place : ainsi je n'ai pas à me poser la question "avais-je bien lancé notepad en mode admin ?")


    Les paramètres "utilisateurs" sont différents.
    L'application va créer un fichier user.config dans C:\users\Untel\AppData\Local\MonProgramme
    Ce dossier n'étant pas protégé, il peut-être mis à jour dynamiquement par l'application.

    Pour ce que vous voulez faire, il faut utiliser un autre système (comme gérer un fichier dans C:\ProgramData\MonApplication).

  3. #3
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Hmm... Soit ça a évolué, soit peut-être que je faisais autrement.

    Je me souviens avoir réussi à le faire à une époque. Peut-être que je lançais le programme explicitement en administrateur ? Peut-être que ça a changé de comportement depuis ?

    Anyway, c'est pas grave, je vais laisser comme ça. Le programme doit être lancé en tâche planifiée (avec un compte spécifique).
    Si on a besoin de le lancer "one shot" il faudra penser à le lancer depuis le planificateur de tâche et puis voilà

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. J2ME comment ajouter des contacts dans une application
    Par kakashi05 dans le forum Java ME
    Réponses: 4
    Dernier message: 11/01/2009, 18h09
  2. Réponses: 28
    Dernier message: 13/07/2008, 14h31
  3. comment intégrer des dll dans une application c#
    Par imene_t1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 23/11/2007, 23h40
  4. Comment sauvegarder des valeurs dans un fichier txt
    Par NELLLY dans le forum MATLAB
    Réponses: 3
    Dernier message: 16/04/2007, 17h39
  5. Comment afficher des JPEG dans une application Delphi ?
    Par Bouguennec dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/09/2005, 21h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo