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 :

Modifier un fichier de configuration par le code [Fait]


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 51
    Par défaut Modifier un fichier de configuration par le code
    Bonjour,
    Je souhaite modifier un paramètre dans un fichier de configuration par le code. Voici ce que je fait:
    Config = new Config();
    Config .MonParamPWD = "NouvelleValeurPWD";
    Jusque là tout va bien.

    Le problème est que lorsque j'ouvre le fichier de configuration, l'ancienne valeur de la variable MonParamPWD reste visible. Pour tant en mode debug je constate que la NouvelleValeurPWD est utilisée dans le programme.

    Quelqu'un pourrait m'aider.

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 125
    Par défaut
    Salut,

    Pas beaucoup de temps pour vérifier ton code, mais comme je prépare un travail identique, j'ai trouvé un bon tuto:

    http://nico-pyright.developpez.com/t...sectioncsharp/

    Hope this helps...

    Citation Envoyé par Nuloprog Voir le message
    Bonjour,
    Je souhaite modifier un paramètre dans un fichier de configuration par le code. Voici ce que je fait:
    Config = new Config();
    Config .MonParamPWD = "NouvelleValeurPWD";
    Jusque là tout va bien.

    Le problème est que lorsque j'ouvre le fichier de configuration, l'ancienne valeur de la variable MonParamPWD reste visible. Pour tant en mode debug je constate que la NouvelleValeurPWD est utilisée dans le programme.

    Quelqu'un pourrait m'aider.

    Merci d'avance

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 51
    Par défaut
    Malheureusement l'incohérence persiste.

    Je pense que quand je modifie la valeur d'un paramètre du fichier app.config, la modification est temporaire.

  4. #4
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.

    Pour modifier un app.config, tu peux essayer la méthode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Ouverture du app.config
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(@"pathDeTonAppConfig\app.config");
    // Récupération du noeud
    XmlNode pathNode = xmlDoc.SelectSingleNode(string.Format("//appSettings/add[@key='{0}']", "cleAModifier");
    // Modification de sa valeur
    pathNode.Attributes["value"].InnerText = taValeur;
    // Sauvegarde des modifications
    xmlDoc.Save(@"pathDeTonAppConfig\app.config");
    Normalement, c'est OK. Et la modification n'est pas temporaire.

    Bon courage

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 51
    Par défaut
    Merci pour ce tuyau. Voici ske j'ai fait

    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    public void  GetAssemblySettings(string assemblyPath)
            {
                Configuration config = ConfigurationManager.OpenExeConfiguration(assemblyPath);
     
                XmlDocument dom = new XmlDocument();
                dom.Load(assemblyPath);
     
                //UserSettings 
                KeyValueConfigurationCollection returnList = new  KeyValueConfigurationCollection();
     
                String settingsType = "userSettings";
     
                XmlNode node = dom.SelectSingleNode("//configuration//" + settingsType);
                    if (node != null)
                    {
                        try
                        {
                            if (node.HasChildNodes)
                            {
                                foreach (XmlNode childNode in node.ChildNodes)
                                {
                                    if (childNode.HasChildNodes)
                                    {
                                        foreach (XmlNode settingNode in childNode.ChildNodes)
                                        {
                                            if (settingNode != null)//the Settings node
                                            {
                                                if (settingNode.Attributes.Count > 0) //there should be at least one attribute
                                                    //returnList.Add(settingNode.Attributes[0].Value, settingNode.InnerText);//the setting name and the setting/value
                                                    settingNode.InnerText = sEncrypt(settingNode.InnerText);
                                                String sValue = ConfigDsn.sStringCnxPWD;
                                                ConfigDsn.sStringCnxPWD = settingNode.InnerText; 
                                            }
                                        }
                                    }
                                }
                            }
     
                        }
                        catch { throw; }
     
                        xmlDoc.Save("..\\..\\app.config");
                                 }
     
            }
    Le problème persiste toujours, comme si la modification était temporaire.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 51
    Par défaut Problème résolu
    J'ai décidé d'utiliser d'autres méthodes protégeant la section <usersettings> dans le fichier de configuration avec l'algo RSA:

    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    public void vCryptConfig()
     
            {
     
                Configuration config =
     
                      ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
     
                ConfigurationSection Usection = config.GetSection("userSettings/Connection.Config");
     
                if (!Usection.SectionInformation.IsProtected)
     
                {
     
                    Usection.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
     
                    Usection.SectionInformation.ForceSave = true;
     
                    config.Save(ConfigurationSaveMode.Modified);
     
     
     
                }
     
     
     
            }
     
     
     
     
     
            public void vDecryptConfig()
     
            {
     
                Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
     
                ConfigurationSection Usection = config.GetSection("userSettings/Connection.Config");
     
                if (Usection != null && Usection.SectionInformation.IsProtected)
     
                {
     
                    Usection.SectionInformation.UnprotectSection();
     
                    config.Save();
     
                }
     
            }

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/11/2009, 18h12
  2. Remplacer le fichier persistence.xml par du code
    Par Baptiste Wicht dans le forum JPA
    Réponses: 5
    Dernier message: 12/05/2008, 13h59
  3. fichier de configuration par reflection
    Par faabriice dans le forum C#
    Réponses: 3
    Dernier message: 09/04/2008, 13h42
  4. [2.0] Modifier le fichier de configuration
    Par mister3957 dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 15/11/2007, 08h59
  5. Réponses: 3
    Dernier message: 04/02/2006, 09h49

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