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

VB.NET Discussion :

[VB.Net 2005] [My.Settings] Problème d'enregistrement des paramètres


Sujet :

VB.NET

  1. #1
    Membre du Club

    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Points : 40
    Points
    40
    Par défaut [VB.Net 2005] [My.Settings] Problème d'enregistrement des paramètres
    Bonjour à tous,

    Voilà j'ai un petit souci.
    J'ai crée des paramètres String "Utilisateur" dans mon application VB .NET afin de stocker des chemins de dossiers.

    En générant ma solution j'obtiens donc mon exécutable et le .config.exe correpondant à l'ensemble de ces paramètres.

    Dans mon logiciel je veux que l'utilisateur puisse modifier ces valeurs sans qu'il ait à modifier à la main le .exe.config.

    J'ai donc crée une interface basée sur un DataGridView avec une colonne listant le nom des Paramètres et une seconde colonne listant la valeur lue dans My.Settings.

    Après changement dans le DataGridView je lance cet evènement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub CDataGridViewListeDossier_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Me.CellEndEdit
                Try
                    'On sauvegarde le contenu dans le fichier de Paramétrage
                    My.Settings.LastChanged = Today
                    My.Settings.Item(Me.Rows(CurrentCell.RowIndex).Cells(NOM_COLONNE_1).Value) = Me.CurrentCell.Value
                    My.Settings.Save()
                Catch ex As Exception
                    MsgBox(ex.Message)
                End Try
    End Sub
    Et là aucune modification est effectuée dans le .exe.config, par contre la nouvelle valeur est toujours en mémoire (My.Settings.Item("Parametre1")).

    En connaissez vous les raisons?

    En vous remerciant d'avance!
    1 bière, ça va. 2 bières, ça va. 3 bières, ça va. 4 bières, ça va. 5 bières, ça va. 6 bières, ça fait un pack.
    JP Rouve

  2. #2
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 124
    Points : 150
    Points
    150
    Par défaut
    Il me semble que le My.Settings n'est sauvegardé qu'en quittant l'application. Perso j'ai jamais utilisé ca... Donc à verifier !

  3. #3
    Membre du Club

    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Points : 40
    Points
    40
    Par défaut
    Bonjour Remy_74! Merci de ton intervention!

    Citation Envoyé par Remy_74
    Il me semble que le My.Settings n'est sauvegardé qu'en quittant l'application.
    C'est aussi ce que je pensais, surtout que j'ai coché dans les propriétés de mon projet dans l'onglet Application "Enregistrer My.Settings lors de l'arrêt".

    D'après la doc sur le net que j'ai pu trouver cela enregistre de manière persistante le paramétrage en mémoire de sûr.
    Mais dans mon cas le fichier ne se met pas à jour... est ce normal?
    1 bière, ça va. 2 bières, ça va. 3 bières, ça va. 4 bières, ça va. 5 bières, ça va. 6 bières, ça fait un pack.
    JP Rouve

  4. #4
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 124
    Points : 150
    Points
    150
    Par défaut
    Je vais tester sur un projet et je te dis.
    D'aprés ce que j'ai vu la fonction "Save" ne sauvegarde que les "Settings" que tu as créer avec My.Settings (Propriété du projet puis Settings).
    Est ce bien ce que tu utilises ?

  5. #5
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 124
    Points : 150
    Points
    150
    Par défaut
    J'ai fait pas mal d'essai, et ca fonctionne. Par contre il y a plusieurs astuces ..
    Jette un oeil ici http://www.codeproject.com/vb/net/appsettings2005.asp

    J'espere que ca t'aidera..


    PS: désolé j'ai pas trouvé de Tuto sur developppez.com..

  6. #6
    Membre du Club

    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Points : 40
    Points
    40
    Par défaut
    Merci pour ton aide Remy_74, je vais tout de suite sur le lien et je te retiens au courant!
    1 bière, ça va. 2 bières, ça va. 3 bières, ça va. 4 bières, ça va. 5 bières, ça va. 6 bières, ça fait un pack.
    JP Rouve

  7. #7
    Membre habitué
    Inscrit en
    Avril 2007
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 124
    Points : 150
    Points
    150
    Par défaut
    Je pense que dans ton cas de figure tu regarde le mauvais fichier..
    Les settings sont sauvegardés dans un autre repertoire (donc par utilisateur).
    A mon avis tout viens de la..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %USERPROFILE%\Application Data\<Company Name>\<appdomainname>_<eid>_<hash>\<verison>\user.config.
    Or
     
    %USERPROFILE%\Local Settings\Application Data\<Company Name>\<appdomainname>_<eid>_<hash>\<verison>\user.config.

  8. #8
    Membre du Club

    Inscrit en
    Février 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 38
    Points : 40
    Points
    40
    Par défaut
    J'ai lu attentivement l'article et après plusieurs tests, ça ne fonctionne pas.

    Voici un extrait du .exe.config généré au niveau de mon exe:
    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
    <?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=b77a5c561934e089" >
                <section name="MIEG100.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <connectionStrings />
        <system.diagnostics>
            <sources>
                <!-- Cette section définit la configuration de l'enregistrement dans le fichier journal de My.Application.Log -->
                <source name="DefaultSource" switchName="DefaultSwitch">
                    <listeners>
                        <add name="FileLog"/>
                        <!-- Supprimez les marques de commentaire dans la section suivante pour écrire dans le journal des événements de l'application -->
                        <!--<add name="EventLog"/>-->
                    </listeners>
                </source>
            </sources>
            <switches>
                <add name="DefaultSwitch" value="Information" />
            </switches>
            <sharedListeners>
                <add name="FileLog"
                     type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
                     initializeData="FileLogWriter"/>
                <!-- Supprimez les marques de commentaire dans la section suivante et remplacez APPLICATION_NAME par le nom de votre application à inscrire dans le journal des événements de l'application -->
                <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
            </sharedListeners>
        </system.diagnostics>
        <userSettings>
            <MIEG100.My.MySettings>
    (...)
                <setting name="DIR_LOG" serializeAs="String">
                    <value>C:\test\</value>
                </setting>
    (...)
            </MIEG100.My.MySettings>
        </userSettings>
    </configuration>

    Citation Envoyé par Remy_74
    Je pense que dans ton cas de figure tu regarde le mauvais fichier..
    Les settings sont sauvegardés dans un autre repertoire (donc par utilisateur).
    A mon avis tout viens de la...
    Je suis d'accord avec toi sur le fait que l'application semble enregistrer les paramètres dans un répertoire lié à l'utilisateur. D'ailleurs le voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?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=b77a5c561934e089" >
                <section name="MIEG100.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            </sectionGroup>
        </configSections>
    </configuration>
    Remarque la PublicKeyToken qui est identique... à mon avis le user.config fait référence à mon .config au niveau de l'executable...

    Le listage de mes paramètres et de leur valeur je le fais d'après la collection My.Settings.Properties :

    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
     Private Sub AfficherGestionDossier(ByVal tTypeFlux As TYPE_FLUX)
     
    (...)
            Dim oProperty As System.Configuration.SettingsProperty
    (...)
                'Récupération des propriétés dans le Setting
                For Each oProperty In My.Settings.Properties
                    iCurPos = oProperty.Name.IndexOf("_")
                    szTypeFlux = oProperty.Name.Substring(0, IIf(iCurPos >= 0, iCurPos, 0))
                    If szTypeFlux = GlobalType.GetLibelleType(GlobalType.TYPE_FLX, tTypeFlux) Then
                        colFoldersPropertyName.Add(oProperty.Name)
                        colFoldersValue.Add(oProperty.DefaultValue)
                    End If
                Next
    (..)
     
     
        End Sub
    Rhalala je suis sur qu'on est pas loin c'est peut être juste une propriété à configurer dans le projet...

    Merci en tout cas de ton aide , je continue les investigations.
    1 bière, ça va. 2 bières, ça va. 3 bières, ça va. 4 bières, ça va. 5 bières, ça va. 6 bières, ça fait un pack.
    JP Rouve

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    Je suis confronté au même problème.
    J'ai ajouté un certains nombre de settings par les propriétés du projet dans VS (VB.NET).

    Morceau choisi du fichier settings.settings
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version='1.0' encoding='utf-8'?>
    <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true">
      <Profiles />
      <Settings>
        <Setting Name="Org1" Type="System.Drawing.Color" Scope="User">
          <Value Profile="(Default)">255, 192, 192</Value>
        </Setting>
        <Setting Name="Org2" Type="System.Drawing.Color" Scope="User">
          <Value Profile="(Default)">OrangeRed</Value>
        </Setting>
    A l'exécution, j'ajoute d'autres settings comme ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim p As SettingsProperty = New SettingsProperty(tbxCat.Text.Trim())
                p.PropertyType = GetType(System.Drawing.Color)
                p.DefaultValue = ColorDialog1.Color
                My.Settings.Properties.Add(p)
                My.Settings.Save()
    Avec la même instance d'exécution, je constate bien le paramètre supplémentaire qui a été "enregistré". Mais quand je ferme le programme et que je le ré-exécute, aucun paramètre n'a été sauvegardé.

    Quelqu'un à-t-il trouvé la solution depuis ?
    Merci

  10. #10
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut my.settings conserve du cache
    bonjour
    c'est ce que mentionnes REMY_74 qui est bon.
    Le fichier app.exe.config read-only heureusement sert à stocker "les parametres par defaut lors de l'installation" ou à les retablir c'est pour cela qu'on trouve dans l'intellisense My.MySettings.

    Exemple :
    ----------
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    'LE POVRE USER NE PEUT PAS MODIFIER "VOS PARAMETRES PAR DEFAUT DU 
    'FICHIER APP.EXE.CONFIG DE L'APPLI DEVELOPPE PAR VOS SOINS CHER
    'DEVELOPPEUR MAIS PEUT LES LIRES
    '
    'MAIS PEUT LES PERSONNALISER ET LES SAUVEGARDER DANS 
    'SON DOSSIER UTILISATEUR DANS FICHIER User.Config 
    'DE SON DOSSIER UTILISATEUR.
    '
    Public Class Form1
        Dim nomApp As String
        Dim nomDepartement As String
        Dim intCodeZIP As Integer
        Public Sub New()
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
     
            '1.L'UTILISATEUR  LIT UN PARAMETRE APPLICATION(MySettings)  "Par Defaut" à partir du fichier MonApp.exe.config
            Me.nomApp = My.MySettings.Default.AppRemy
     
            '2.L'UTILISATEUR  LIT UN PARAMETRE UTILISATEUR(user) "Par Defaut" à partir du fichier MonApp.exe.config
            Me.intCodeZIP = My.MySettings.Default.CodeZip
            Me.nomDepartement = My.MySettings.Default.Departement
     
            'L'UTILISATEUR PEUT MODIFIER LES PARAMETRES -UNIQUEMENT UTILISATEURS- ET LES ENREGISTRER DANS LE DOSSIER D'INSTALLATION DE L'APPLICATION 
            'C:\Documents and Settings\Remy\Local Settings\Application Data\DOSSIERINSTALLATION\MonApp.exe_Url_gdbrpuynuq1pr4k0blydqajyidj044d5\1.0.0.0
            'le fichier "caché" s'appelle USER.CONFIG.
            'Il utilise la syntaxe Settings
     
            intCodeZIP = 78
            nomDepartement = "Yvelines"
            My.Settings.CodeZip = intCodeZIP
            My.Settings.Departement = nomDepartement
     
            '3.L'UTILISATEUR   LIT A NOUVEAU "SES" PARAMETRE UTILISATEUR(user) "Personnalises cette fois"  À PARTIR DU FICHIER USER.CONFIG
            'REMARQUEZ LA SYNTAXE SANS "default"
            Me.intCodeZIP = My.Settings.CodeZip
            Me.nomDepartement = My.Settings.Departement
     
            'IL NE PEUT PAS MODIFIER UN PARAMETRE DE TYPE APPLICATION
            'nomApp = "Remy_à Grignon"
            'My.Settings.AppRemy = nomApp  ceci est refuse à la compilation.
     
     
     
     
        End Sub
        'VOUS L'AVEZ SERIEUSEMENT LIMITE AVEC VOS PARAMETRES  DEVELOPPEUR!!!.
    End Class
     
    'ci-apres le dossier MonApp.exe.config
     
    <!--parametre Utilisateurs-->
        <userSettings>
          <MonApp.My.MySettings>
                <setting name="Departement" serializeAs="String">
                    <value>Seine-Saint-Denis</value>
                </setting>
                <setting name="CodeZip" serializeAs="String">
                    <value>92</value>
                </setting>
            </MonApp.My.MySettings>
        </userSettings>
        <!--parametre Application-->
        <applicationSettings>
          <MonApp.My.MySettings>
                <setting name="AppRemy" serializeAs="String">
                    <value>Drawing</value>
                </setting>
            </MonApp.My.MySettings>
        </applicationSettings>
     
    'ci-apres le dossier User.Config integral de l'exemple
    'il ne contient que la section userSettings modifiee
     
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <userSettings>
        <MonApp.My.MySettings>
          <setting name="Departement" serializeAs="String">
            <value>Seine-Saint-Denis</value>
          </setting>
          <setting name="CodeZip" serializeAs="String">
            <value>92</value>
          </setting>
        </MonApp.My.MySettings>
      </userSettings>
    </configuration>
    NB: qu'on se le dise !!!!
    les parametres de Type Application sont stockes dans MonApp.exe.config et ne peuvent pas etre -bien evidemment- modifies.
    La raison est que ce serait DISASTROUS et donc empecher 2 utilisateurs lambda utilisant la meme appli sur la meme meme machine de modifier ses parametres.

    Par contre les parametres Utilisateurs( 2eme type) sont personnalises "per user" et donc sauvegardes dans le fichier User.Config dans chaque dossier Utilisateur.

    bon code.....

  11. #11
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut application mutante
    rebonjour

    Quant à KanetSugu il veut faire une Appli parametree Non pas par lui -DEVELOPPEUR- mais par n'importe quel utilisateur,ce qui est un non-sens.
    Alors que l'utilisateur lambda peut rajouter à "Ton Appli" n'importe quoi.
    Reflechis-y donc KanetSugu.
    En tous cas KanetSugu c'est pas permis de faire ce que tu veux faire.
    Mais si tu veux "hacker" voici un tuyau tu lances ton appli et pendant qu'elle s'execute ,ouvre TonApp.exe.config et modifie manuellement un parametre et regarde ce qui se passe dans ton Appli.

    bon code.....

Discussions similaires

  1. [1.x] Probléme d'enregistrement des paramétres d'un fichiers xml
    Par farhaenis dans le forum Symfony
    Réponses: 11
    Dernier message: 16/06/2011, 16h58
  2. [MySQL] problème d'enregistrement des données
    Par johan0510 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/03/2010, 10h26
  3. Problème d'enregistrement des modifications sur dephi7
    Par crepinus83 dans le forum Débuter
    Réponses: 7
    Dernier message: 28/09/2009, 12h15
  4. [VB.NET 2005] My.Settings
    Par ites dans le forum VB.NET
    Réponses: 4
    Dernier message: 14/06/2007, 09h06
  5. Réponses: 4
    Dernier message: 12/06/2007, 12h15

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