none
monapp.exe.config dans Application.UserAppDataPath RRS feed

  • Question

  • Hello

    I write a C# app, i use

    ConfigurationManager.OpenExeConfiguration

    to store and read the parametre of my App.

    MyApp need to run under Linux and windows, so i would like to use the home directory to store the one config file for one user, i use config.saveas() and this is ok to have the parametre in the user path, but in fact i can't read it to load the parametre !!

    What the way to replace :

    System.Configuration.Configuration config =

    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) as Configuration;

    by

    System.Configuration.Configuration config =

    ConfigurationManager.OpenExeConfiguration(Application.UserAppDataPath + FolderSeparator() + Application.ProductName, ConfigurationUserLevel.None) as Configuration;

     

    samedi 1 septembre 2007 21:14

Réponses

Toutes les réponses

  •  

    For englsih question, you can use the English version of the forums: http://forums.microsoft.com/MSDN/default.aspx?SiteID=1
    dimanche 2 septembre 2007 11:00
  • Désoler, un mauvais reflexe, de plus je suis passer par l'aide de VS, donc je reformule ma requette en français.

    j'ecrit une application en C#,j 'utilise

    ConfigurationManager.OpenExeConfiguration

    pour stocker et lire les paramétres de mon appli, cela fonctionne plutot bien.

    Mon appli doit tourner sous Linux et windows,alors je souhaiterai utilisé le dossier utilisateur pour stocker le fichier de config et ce un par utilisateur comme ça chaque utilisateur aura ces propre paramétre sans probleme de droit d'acsés aux répertoire program files ou /usr/bin, j'utilise config.saveas() et c'est ok le fichier s'enregistre dans le repertoire utilisateur, mais ensuite je n'arrive pas a trouver de solution pour le relire sans utiliser le myapp..exe.config qui ne seras pas accecible sous linux et qui n'as absolument rien a faire dans le repertoire des executable car dans un shell si l'utilisateur tape myap et utilise l'auto completion celle ci vas retourner myapp.exe et myapp.exe.config qui n'est pas executable!!

    Comment faire pour remplacer :

    System.Configuration.Configuration config =

    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) as Configuration;

    par

    System.Configuration.Configuration config =

    ConfigurationManager.OpenExeConfiguration(Application.UserAppDataPath + FolderSeparator() + Application.ProductName, ConfigurationUserLevel.None) as Configuration;



    dimanche 2 septembre 2007 11:32
  •  

    La solution que je vois est d'ouvrir vous-même le fichier app.config correspondant à votre application et de modifier les valeurs "à la main": n'oubliez pas que ce fichier reste un simple fichier XML Wink

     

    Pour vous aider, vous pouvez utiliser ma classe ConfigReaderWriter: http://morpheus.developpez.com/trucs/classes/

     

    Elle n'est pas parfaite, loin de là, mais semble correspondre à vos besoins Smile

     

     

     

    A+

    dimanche 2 septembre 2007 12:27
  • Merci pour la reponse, je vais regarder la classe mais c'est domage que il n'y est pas une solution native alors qu'il est possible de dire "savas" je trouve même ça étrange.
    dimanche 2 septembre 2007 19:26
  • La classe a l'air plutot bien mais il manquerait deux fonction, Add et Save a moins que close implique save.
    dimanche 2 septembre 2007 19:47
  • Le Save est inutile: le fichier est automatiquement sauvegardé dès que le SetXmlValue est appelé Wink

     

     

    A+

    dimanche 2 septembre 2007 20:31
  • Donc contrairement a la methode native du Framework, si au moment du set value la clé n'existe pas au lieu de levée une exception la clé est crée et donc un set sert aussi de Add?
    dimanche 2 septembre 2007 20:40
  • Désoler pour le télégramme, mais j'ai faillit oublié, puis je utilisé cette classe (avec sont nom d'autheur) dans un soft GNU open source :
    http://dev.zuckschwerdt.org/notes/

    http://sourceforge.net/project/showfiles.php?group_id=180342

    Merci


    dimanche 2 septembre 2007 20:44
  •  Surfzoid A écrit:
    Donc contrairement a la methode native du Framework, si au moment du set value la clé n'existe pas au lieu de levée une exception la clé est crée et donc un set sert aussi de Add?

     

    Non, il n'y a pas de Add automatique: si la clé n'existe pas, il ne se passera rien Wink

     

     

    PS: Oui, pas de pb pour utiliser cette classe tant que le nom de l'auteur (moi Wink apparait Smile

    dimanche 2 septembre 2007 20:50
  • Comment le premier fichier de la premiere utilisation est crée avec cette classe ?
    Pour l'instant j'ai une fonction "NoDefParm" avec la methode native :
           void DefParam()
            {
                try
                {
                    config.AppSettings.Settings.Add("DevType", "/dev/ircomm0");
                    config.AppSettings.Settings.Add("TypeCom", "4"); //this.CmbTypeCom.SelectedIndex.ToString());
                    config.AppSettings.Settings.Add("LastDevType", "/dev/ircomm0");
    .....................


    Mais cela me trouble d'utilisé deux composant different pour le même travail, de plus quand j'ai commencé avec la méthode native j'ai trouvé lourd comme méthode de dire si key absente alors "Add" alors qu'il serait si simple de le faire automatiquement dans le set value.
    dimanche 2 septembre 2007 20:55
  •  

    Créé un simple fichier de configuration (app.config) mais n'utilisez que ma classe pour y accéder et le modifier Smile
    dimanche 2 septembre 2007 21:08
  • oui c'est la voie que j'ai utilisé mais au runtime le myapp.exe.config(issue du app.config) est placé a coté du myapp.exe donc on retombe sur le probleme de départ vis avis des droit utilisateur et sous linux d'avoir un fichier XML non executable dans le repertoire des executables.
    Il faudrait avoir dans le code tout le fichier XML dans un string et le crée quand il n'en a pas encore un , mais
    Sous Windows --> \cr\lf
    Sous Linux ---> \Lf
    Donc possible mais trés trés lourd.
    Aussi j'ai déja eut le cas ou le fichier est là mais une clé est manquante, par exemple ajout d'une option dans les version futur du soft et la un add s'impose car il serai abérant d'ecraser les paramétres existant de l'utilisateur suite a une simple mise a jour du logiciel.

    dimanche 2 septembre 2007 21:15
  • Effectivement, la on tourne en rond et je n'ai plus d'idées, désolé...

    dimanche 2 septembre 2007 21:18
  • Salut
    Bien plut tard, mais toujours mieux que jamais, lol.
    Voici la réponse au ADD par défaut, car en effet au depart ont a par exemple 11 options a enregistrer dans le fichier XML et 6 mois plus tard ont décide d'en crée une nouvelle et la ça coince dur, donc la solution se trouve ici dans la revision "49" :
    http://cs-obexftp.svn.sourceforge.net/viewvc/cs-obexftp/trunk/ConfigReaderWriter.cs?view=log

    Afin de comparer et voir ce que j'ai ajouter/modifié, ont peut utiliser l'exlent outil de difs fournit par SF, en comparant la revision 49 avec la 7 :
    http://cs-obexftp.svn.sourceforge.net/viewvc/cs-obexftp/trunk/ConfigReaderWriter.cs?view=diff&r1=49&r2=7&diff_format=h

    Sinon j'ai aussi trouvé tout simplement dans la méthode native la fonction : .saveas qui aurait du gazé, mais bon trop tard
    dimanche 11 novembre 2007 21:46