Где хранятся 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 в каталоге исполняемых файлов не обновляется, он по-прежнему содержит значения по умолчанию. Плюс, насколько я могу судить, ни один из других файлов в этом каталоге также не обновляется! Однако, когда программа считывает значение обратно, оно получает измененное значение, поэтому я знаю, что оно где-то сохранено ...

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


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


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;

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.


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.


-17

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


1
это прямо во время разработки . После развертывания они уходят в другое место.
— Джоэл Коухорн

2
у меня это работает в среде разработки, и файл остался неизменным. там хранится только значение по умолчанию, а не обновленное.
— Стэн Р.

4
Stan R правильный, он только сохраняет значение по умолчанию. Не те значения, которые вы можете изменить во время отладки.
— анонимный тип
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.