Où sont stockés les Properties.Settings.Default?

145

Je pensais que je savais cela, mais aujourd'hui, on me prouve encore une fois.

Exécution de VS2008, .NET 3.5 et C #. J'ai ajouté les paramètres utilisateur à l'onglet Paramètres des propriétés avec les valeurs par défaut, puis les ai lus en utilisant ce code:

myTextBox.Text = Properties.Settings.Default.MyStringProperty;

Ensuite, une fois que l'utilisateur a modifié la valeur dans la boîte de dialogue des options, je l'enregistre comme ceci:

Properties.Settings.Default.MyStringProperty = myTextBox.Text;
Properties.Settings.Default.Save();

Ma question est la suivante: où cette nouvelle valeur est-elle sauvegardée? le fichier MyApp.exe.config dans le répertoire exécutable n'est pas mis à jour, il contient toujours les valeurs par défaut. De plus, pour autant que je sache, aucun des autres fichiers de ce répertoire n'est mis à jour non plus! Cependant, lorsque le programme relit la valeur, il obtient la valeur modifiée, donc je sais qu'elle est enregistrée quelque part ...

Ce n'est pas seulement académique, je devais être en mesure de modifier manuellement la valeur ce matin et je suis resté perplexe lorsque je ne trouvais rien qui changeait.

DaveN59
la source
2
Il est important de noter que l'emplacement de stockage peut changer entre les différentes versions du framework ou du système d'exploitation. Ne codez rien de programmatique à l'emplacement de stockage.
Greg D du
Si vous êtes dans Visual Studio et développez une nouvelle application, vérifiez dans AppData \ Local \ Microsoft \ VOTRE NOM D'APPLICATION Le nom du fichier est user.config. Je suis sous Windows 7
JenonD
ou sous AppData \ Local one
KansaiRobot
Quelque chose avec lequel je luttais qui m'a amené à cette question et à d'autres: user.config n'est créé que lorsque applicationsSettings.Save (); est appelé. (où applicationSettings est défini ApplicationSettings applicationSettings = new ApplicationSettings (this);).
fusionner

Réponses:

142

Afin de travailler avec les versions plus récentes de la politique de Windows qui autorise uniquement l'accès en lecture par défaut au dossier Program Files (sauf si vous demandez une élévation avec UAC, mais c'est un autre sujet ...), votre application aura un dossier de paramètres sous %userprofile%\appdata\localou %userprofile%\Local Settings\Application Dataen fonction de la version de Windows que vous exécutez, pour les paramètres spécifiques à l'utilisateur. Si vous stockez les paramètres pour tous les utilisateurs, ils seront dans le dossier correspondant sous C:\usersou C:\Documents and Settingspour tous les profils utilisateur (ex:) C:\users\public\appdata\local.

Jasonh
la source
3
De plus, le .config généré dans Visual Studio, qui se termine dans le dossier de l'exécutable, je crois qu'il n'est utilisé que pour le débogage. Lors de l'empaquetage de l'application finale, vous n'incluez pas ce .config, car il est généré la première fois que l'utilisateur exécute l'application.
Will Eddins
11
Des versions plus récentes? C'est le cas depuis Windows 2000. Vous venez de vous en tirer parce que vous vous exécutiez en tant qu'administrateur.
Joel Coehoorn
1
@Joel Coehoorn: C'est vrai, mais maintenant, dans le compte administrateur de Windows Vista et les versions ultérieures, vous ne pouvez pas obtenir l'accès en écriture à Program Files sans une invite d'élévation UAC par défaut. C'est la politique qui a changé. :)
jasonh
2
Il convient également de noter que le dossier change à chaque mise à niveau de version - de sorte que l'utilisateur perd ses préférences chaque fois que vous mettez à jour le logiciel.
Ian Boyd
17
En fait non, ils ne le font pas. Vous devez créer un paramètre, nommez-le quelque chose comme "UpgradeNeeded" et définissez-le par défaut sur true. Ensuite, lorsque votre application démarre, vérifiez ceci. Si c'est vrai, appelez Properties.Settings.Default.Upgrade (), .Save () et .Reload (). Puis réinitialisez UpgradeNeeded sur false et enregistrez.
jasonh
86

Vous pouvez obtenir le chemin par programme:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
Akbaritabar
la source
1
Hmm, je vois des situations où le chemin renvoyé par ceci n'est PAS le chemin utilisé par Paramètres. Un aperçu?
George Mauer
1
@GeorgeMauer Vous voulez dire Roamingou peut-être à la LocalLowplace de Local? ConfigurationUserLeveldépend du profil de l'utilisateur itinérant ou local. Dans les entreprises, il est souvent itinérant.
Kay Zed
Lien vers cette réponse et mes commentaires en dessous, montrant à quoi ressemble le chemin.
Kay Zed
Je trouve cette même réponse partout, utilisez ConfigurationManager.OpenExeConfiguration () - mais cela donne trois options en fonction de la valeur de ConfigurationUserLevel que vous passez, ce qui donne trois résultats différents - quel est-il?. Comment savoir, dans un programme, dans le code, au moment de l'exécution, de quel fichier exactement le programme obtient ses paramètres?
Dave
None: obtient la configuration qui s'applique à tous les utilisateurs, PerUserRoaming: obtient la configuration itinérante qui s'applique à l'utilisateur actuel, PerUserRoamingAndLocal: obtient la configuration locale qui s'applique à l'utilisateur actuel.
Akbaritabar
8

merci de m'avoir pointé dans la bonne direction. J'ai trouvé user.config situé à cette monstruosité: c: \ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

J'ai dû mettre à jour la version de mon application et tous les paramètres semblaient avoir disparu. l'application a créé un nouveau dossier avec la nouvelle version et a utilisé les paramètres par défaut. Il a fallu une éternité pour trouver où le fichier était stocké, mais il s'agissait ensuite d'un simple copier-coller pour obtenir les paramètres de la nouvelle version.

Jeremy Ehret
la source
Comment savoir LOOKSLIKESOMEKINDOFHASH?
NeoSvet
1
L'appel Properties.Settings.Default.Upgrade () ferait la même chose automatiquement. Il restaure la configuration de sa version précédente, tout comme @jasonh l'a dit dans une autre réponse ci-dessus.
Alex
5

il est enregistré dans vos Documents and Settings \% user% \ Local Settings \ Application Data ...... etc recherchez un fichier appelé user.config ici

cependant, l'emplacement peut changer.

Stan R.
la source
5
En fait, la variable d'environnement correcte pour les propriétés spécifiques à l'utilisateur est% userprofile%. La spécification de documents et de paramètres sous Vista ou 7 entraînera soit un dossier manquant, soit des autorisations manquantes sur le dossier qu'il trouve.
jasonh
1

Un de mes services Windows est connecté en tant que système local dans Windows Server 2016, et je peux trouver le user.config sous C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {votre nom d'application}.

Je pense que le moyen le plus simple est de rechercher le nom de votre application sur le lecteur C, puis de vérifier où se trouve l'utilisateur.config

EvilDuck
la source
0

Les paramètres spécifiques à l'utilisateur sont enregistrés dans le dossier Application Data de l'utilisateur pour cette application. Cherchez un user.configfichier.

Je ne sais pas à quoi vous vous attendiez, car les utilisateurs n'ont souvent même pas d'accès en écriture au répertoire exécutable en premier lieu.

Joël Coehoorn
la source
0

Ils sont enregistrés dans YOUR_APP.exe.config, le fichier est enregistré dans le même dossier que le YOUR_APP.exefichier, <userSettings>section:

   <userSettings>
      <ShowGitlabIssues.Properties.Settings>
         <setting name="SavedUserName" serializeAs="String">
            <value />
         </setting>
         <setting name="SavedPassword" serializeAs="String">
            <value />
         </setting>
         <setting name="CheckSave" serializeAs="String">
            <value>False</value>
         </setting>
      </ShowGitlabIssues.Properties.Settings>
   </userSettings>

voici le code cs:

public void LoadInfoLogin()
{
    if (Properties.Settings.Default.CheckSave)// chkRemember.Checked)
    {
        txtUsername.Text = Properties.Settings.Default.SaveUserName;
        txtPassword.Text = Properties.Settings.Default.SavePassword;
        chkRemember.Checked = true;
    }
...
Luke
la source
-1

Pour ceux qui se demandent où se trouvent les paramètres des applications du Microsoft Store, ils se trouvent soit dans WindowsApps, qui est très verrouillé, mais vous pouvez y accéder en ouvrant votre application, puis en ouvrant le chemin du fichier avec Task-Manager.

Mais il est plus probable qu'ils soient enregistrés dans C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.

Lukas
la source
-17

Il y a un dossier appelé «Propriétés» sous le dossier racine de votre projet, et il y a un fichier * .settings sous ce dossier. C'est là qu'il est stocké.

JW
la source
1
c'est juste pendant le développement . Après le déploiement, ils vont ailleurs.
Joel Coehoorn le
2
J'ai eu cela en cours d'exécution dans un environnement de développement et le fichier est resté inchangé. il n'y stocke que la valeur par défaut, pas la mise à jour.
Stan R.
4
Stan R est correct, il ne stocke que la valeur par défaut. Pas les valeurs que vous pouvez modifier lors du débogage.
Type anonyme