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 :

Modification de fichier de config, comment faire?


Sujet :

C#

  1. #1
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut Modification de fichier de config, comment faire?
    Bonjour à tous,

    je m'arrache les cheveux depuis un certain sur un problème.

    Mon appli génère un fichier de config, ce qui est normal. Au cours de l'utilisation,
    je modifie les valeurs qui s'y trouvent, mais celles ci ne sont pas accessible.
    Si je crypte le fichier de config, au prochain accès aux données, j'ai carrement une exception parce qu'il ne reconnait pas certains attributs du fichier.
    Il me faut systématiquement relancer l'appli pour accéder aux modifications.
    Oui, un redémarrage et tout rentre dans l'ordre.

    Comment faire pour que les modifications soient aussitot accessibles?


    Merci

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Au cours de l'utilisation,
    je modifie les valeurs qui s'y trouvent, mais celles ci ne sont pas accessible.
    Qu'est ce que tu veux dire par la ?

    Si je crypte le fichier de config, au prochain accès aux données, j'ai carrement une exception parce qu'il ne reconnait pas certains attributs du fichier.
    C'est quoi ton exception ?

    Peux tu nous montrer ton code ?

    Il y a un gros manque d'information pour que l'on puisse t'aider
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Citation Envoyé par ced600
    Qu'est ce que tu veux dire par la ?
    Et bien qu'une fois les modifications effectuées, elles ne sont pas accessibles tant que l'appli n'a pas été redémarrée.


    Citation Envoyé par ced600
    Il y a un gros manque d'information pour que l'on puisse t'aider
    Euh pas vraiment je crois, la question n'est pas comment modifier le fichier, ça c'est bon ça marche. la question c'est:

    Quelle est la méthode pour recharger le fichier de configuration une fois qu'il a été modifié à "run time"?

    L'exception est du au fait que le fichier n'est pas rechargé une fois qu'il a été crypté donc forcément, il n'est plus reconnu comme "standard". Au redémarrage, il est rechargé et donc considéré comme crypté.

    J'espère avoir été un petit peu plus clair. mon premier message pouvait préter

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Où est ton code ?

    C'est comme l'extension de ton fichier de configuration ? Comment tu ecrit les données dedans ?

    Je voulais avoir les informations que te donnes l'exception.

    Comment tu modifie les valeurs du fichiers ?

    J'ai tou un tas d'autre question comme cela, si tu ne peut y répondre je ne pourrais pas t'aider, c'est aussi simple que cela.

    Maintenant c'est toi qui vois.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  5. #5
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    Bon, puisque tu incistes et malgré le fait que je ne pense pas que ça serve beaucoup, voilà:



    Mon appli génère un fichier de config, ce qui est normal. Au démarrage de l'appli, j'execute le code nécessaire au cryptage de ce fichier. Tout se passe bien et je peux vérifier que le fichier a été crypté.
    Seulement voilà après, quand je tente d'accéder aux données, une erreur se produit. Voici le fichier initiale:

    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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=token1" >
                <section name="MonAppli.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=token1" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <connectionStrings />
      <configProtectedData>
        <providers>
          <add useMachineProtection="true" name="DPAPIProtection"
               type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=token2"/>
        </providers>
      </configProtectedData>
      <userSettings>
        <MonAppli.Properties.Settings>
          <setting name="Truc" serializeAs="String">
            <value />
          </setting>
          <setting name="Machin" serializeAs="String">
            <value>en</value>
          </setting>
        </MonAppli.Properties.Settings>
      </userSettings>
    </configuration>
    mouliné par ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Configuration config =
                      ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
    ConfigurationSection Usection = config.GetSection("userSettings/MonAppli.Properties.Settings");
    if (!Usection.SectionInformation.IsProtected)
                    {
    Usection.SectionInformation.ProtectSection("DPAPIProtection");
                        Usection.SectionInformation.ForceSave = true;
                        config.Save(ConfigurationSaveMode.Modified);
                    }
    il devient :

    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
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=token1" >
                <section name="MonAppli.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=token1" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <connectionStrings />
      <configProtectedData>
        <providers>
          <add useMachineProtection="true" name="DPAPIProtection"
               type="System.Configuration.DpapiProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=token2"/>
        </providers>
      </configProtectedData>
      <userSettings>
        <MonAppli.Properties.Settings configProtectionProvider="DPAPIProtection">
          <EncryptedData>
            <CipherData>
              <CipherValue>veritable_bouillie_en_string</CipherValue>
            </CipherData>
          </EncryptedData>
        </MonAppli.Properties.Settings>
      </userSettings>
    </configuration>
    Donc tout c'est bien passé. Sauf qu'à l'accès suivant aux données, j'obtiens un:
    Unrecognized attribute 'configProtectionProvider'. Note that attribute names are case-sensitive. (path_jusqu_au_fichier line num_de_ligne)
    Cet attribut ayant été généré lors du cryptage (il est absent du fichier originel), ma meilleure piste est que le fichier doit être rechargé.
    Sachant comme je l'ai dit, qu'au redémarrage de l'appli tout fonctionne correctement avec nouvelles valeurs et cryptage puisque le fichier est rechargé (ce n'est donc pas le code qui est en cause...).


    Donc la question reste:
    Comment recharger ce fichier de configuration sans redémarrer l'appli?

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    He ben voila, j'ai eu mes infos. Et si c'est très utile, car la j'ai compris que tu utilises ConfigurationManager.
    En effet ce n'est pas le seul moyen de faire un fichier de configuration pour une application !!!!!
    Tu peux le créé toi meme : fichier texte, fichier ini, ton propre fichier xml. Parser le fichier, recup les données, ..., bref tou gérer toi même.

    Sinon j'ai trouvé cela sur le site msdn, je crois que c'est ce que tu cherches masi je peux me tromper :
    http://msdn2.microsoft.com/fr-fr/lib...on(VS.80).aspx

    Pour information, c'est un lien qui est sur la première page de résultat d'une recherche sur google avec ces mots clés : Configuration c# ConfigurationManager.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  7. #7
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    oui merci
    sauf que j'ai déjà tenté et que ça ne résoud pas le problème.
    j'ai aussi tenté:
    Application.Restart();
    Application.Exit();

    et toujours rien. D'ailleurs ça m'a un peu étonné que l'application en question n' "exit" pas mais j'ai supposé que c'est parce que j'appelle la méthode avant que le GUI ne soit chargé.

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Avant d'acceder à tes données ne faut il pas les décrypter ?
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je crois qu'"exit" appelle la méthode close() de la GUI
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  10. #10
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    348
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 348
    Points : 281
    Points
    281
    Par défaut
    le décryptage se fait automatiquement.

    toute fois, c'est génant d'avoir à redémarrer l'appli à chaque fois.

Discussions similaires

  1. Modification de fichier stuts-config.xml
    Par ikouhan dans le forum Struts 2
    Réponses: 1
    Dernier message: 13/10/2010, 14h41
  2. rapatrier un fichier avec telnet, comment faire?
    Par bomonde dans le forum Windows
    Réponses: 1
    Dernier message: 23/01/2009, 17h57
  3. modification du fichier App.config
    Par manel_nasri dans le forum VB.NET
    Réponses: 3
    Dernier message: 30/10/2008, 14h05
  4. Lire 2 fichiers textes simultanément - Comment faire?
    Par jacko2 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 04/04/2008, 17h08
  5. Réponses: 3
    Dernier message: 17/03/2007, 14h59

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