Где хранятся Properties.Settings.Default?

145

Я думал, что знаю это, но сегодня я ошибаюсь - снова.

Работает VS2008, .NET 3.5 и C #. Я добавил пользовательские настройки на вкладку «Свойства» со значениями по умолчанию, а затем прочитал их, используя этот код:

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

Затем, после того, как пользователь отредактировал значение в диалоге настроек, я сохранил его так:

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

У меня вопрос, где это новое значение сохраняется? файл MyApp.exe.config в каталоге исполняемых файлов не обновляется, он по-прежнему содержит значения по умолчанию. Плюс, насколько я могу судить, ни один из других файлов в этом каталоге также не обновляется! Однако, когда программа считывает значение обратно, оно получает измененное значение, поэтому я знаю, что оно где-то сохранено ...

Это не просто учеба, я должен был иметь возможность вручную редактировать значение сегодня утром и был ошеломлен, когда не смог найти ничего, что менялось.

DaveN59
источник
2
Важно отметить, что место хранения может меняться в разных версиях платформы или ОС. Не кодируйте ничего программно в месте хранения.
Грег Д
Если вы работаете в Visual Studio и разрабатываете новое приложение, проверьте AppData \ Local \ Microsoft \ ИМЯ ВАШЕГО ПРИЛОЖЕНИЯ. Имя файла - user.config. Я в Windows 7
JenonD
или под AppData \ Local one
KansaiRobot
Что-то, с чем я боролся, привело меня к этому и другим вопросам: user.config не создается до applicationSettings.Save (); называется. (где определяется applicationSettings ApplicationSettings applicationSettings = new ApplicationSettings (this);).
объединение

Ответы:

143

Чтобы работать с более новыми версиями политики Windows, согласно которой по умолчанию разрешен доступ только для чтения к папке Program Files (если только вы не запрашиваете повышение прав с помощью UAC, но это уже другая тема ...), в вашем приложении будет папка настроек в разделе %userprofile%\appdata\localили %userprofile%\Local Settings\Application Dataв зависимости от того, какую версию Windows вы используете, для настроек, которые зависят от пользователя. Если вы сохраните настройки для всех пользователей, они будут в соответствующей папке в разделе C:\usersили C:\Documents and Settingsдля всех профилей пользователей (например, C:\users\public\appdata\local).

jasonh
источник
3
Кроме того, .config, сгенерированный в Visual Studio, который попадает в папку исполняемого файла, я полагаю, используется только для отладки. При упаковке окончательного приложения вы не включаете этот .config, так как он генерируется при первом запуске приложения пользователем.
Уилл Эддинс
11
Более новые версии? Это имело место со времен Windows 2000. Вам это просто сошло с рук, потому что вы работали от имени администратора.
Джоэл Коухорн
1
@Joel Coehoorn: правда, однако теперь в учетной записи администратора в Windows Vista и далее вы не можете получить доступ на запись в Program Files без запроса повышения прав UAC по умолчанию. Это политика, которая изменилась. :)
Джейсон
2
Следует также отметить, что папка меняется при каждом обновлении версии - поэтому пользователь теряет свои предпочтения при каждом обновлении программного обеспечения.
Ян Бойд
17
На самом деле нет. Вам нужно создать настройку, назвать ее что-то вроде «UpgradeNeeded» и установить по умолчанию значение true. Затем, когда ваше приложение запускается, проверьте это. Если это правда, вызовите Properties.Settings.Default.Upgrade (), .Save () и .Reload (). Затем сбросьте UpgradeNeeded на false и сохраните.
Джейсон
86

Вы можете получить путь программно:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
Akbaritabar
источник
1
Хм, я вижу ситуации, когда возвращаемый путь НЕ является путем, используемым настройками. Любое понимание?
Джордж Мауэр
1
@ GeorgeMauer Вы имеете в виду Roamingили, возможно, LocalLowвместо Local? ConfigurationUserLevelзависит от профиля пользователя, находящегося в роуминге или локального. В компаниях это часто роуминг.
Кей Зед
Ссылка на этот ответ и мои комментарии под ним, показывая, как выглядит путь.
Кей Зед
Я нахожу этот же ответ везде, использую ConfigurationManager.OpenExeConfiguration () - но это дает три варианта в зависимости от того, какое значение ConfigurationUserLevel вы передаете, что дает три разных результата - что это? Как вы узнаете, в программе, в коде, во время выполнения, какой именно файл получает настройки программы?
Дейв
Нет: Получает конфигурацию, которая применяется ко всем пользователям, PerUserRoaming: Получает конфигурацию роуминга, которая применяется к текущему пользователю, PerUserRoamingAndLocal: Получает локальную конфигурацию, которая применяется к текущему пользователю.
Акбаритабар
8

спасибо, что указал мне правильное направление. Я нашел user.config, расположенный в этом чудовище: c: \ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

Мне пришлось обновить версию приложения, и все настройки, казалось, исчезли. Приложение создало новую папку с новой версией и использовало настройки по умолчанию. потребовалось целую вечность, чтобы найти место хранения файла, но затем это было простое копирование и вставка, чтобы получить настройки для новой версии.

Джереми Эрет
источник
Как узнать LOOKSLIKESOMEKINDOFHASH?
NeoSvet
1
Вызов Properties.Settings.Default.Upgrade () сделает то же самое автоматически. Он восстанавливает конфигурацию из своей предыдущей версии, как сказал @jasonh в другом ответе выше.
Алекс
5

он сохраняется в ваших документах и ​​настройках \% user% \ Local Settings \ Application Data ...... и т. д. для поиска файла с именем user.config там

однако местоположение может измениться.

Стэн Р.
источник
5
На самом деле правильная переменная среды для пользовательских свойств -% userprofile%. Указание документов и настроек в Vista или 7 приведет к отсутствию папки или отсутствию прав доступа к папке, которую он находит.
Джейсон
1

Одна из моих служб Windows вошла в систему как локальная система в Windows Server 2016, и я могу найти файл user.config в C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {имя вашего приложения}.

Я думаю, что самый простой способ - поиск по имени вашего приложения на диске C, а затем проверить, где находится user.config.

EvilDuck
источник
0

Пользовательские настройки сохраняются в папке Application Data для этого приложения. Искатьuser.config файл.

Я не знаю, что вы ожидали, так как пользователи часто даже не имеют права на запись в исполняемый каталог.

Джоэл Коухорн
источник
0

Они сохраняются YOUR_APP.exe.config, файл сохраняется в одной папке с YOUR_APP.exeфайлом, <userSettings>раздел:

   <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>

Вот код 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;
    }
...
Люк
источник
-1

Для всех, кто интересуется настройками приложений из Магазина Microsoft, они находятся либо в WindowsApps, который очень заблокирован, но вы можете получить его, открыв свое приложение и затем открыв путь к файлу с помощью Task-Manager.

Но более вероятно, что они сохранены в C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.

Lukas
источник
-17

В корневой папке вашего проекта есть папка «Свойства», в которой находится файл * .settings. Вот где он хранится.

JW
источник
1
это прямо во время разработки . После развертывания они уходят в другое место.
Джоэл Коухорн
2
у меня это работает в среде разработки, и файл остался неизменным. там хранится только значение по умолчанию, а не обновленное.
Стэн Р.
4
Stan R правильный, он только сохраняет значение по умолчанию. Не те значения, которые вы можете изменить во время отладки.
анонимный тип