WPF / C#: где я должен сохранять файлы пользовательских настроек?


каково рекомендуемое место для сохранения файлов пользовательских настроек? Есть ли рекомендуемый метод для работы с пользовательскими настройками?

в настоящее время я использую путь, вернулся из typeof(MyLibrary).Assembly.Location в качестве расположения по умолчанию для хранения файлов, созданных или требуемых приложением.

изменить: Я нашел два связанных / интересных вопроса:

  • лучшее место для сохранения информации о пользователе для приложений Windows XP и Vista
  • каков способ реализации Сохранить / загрузить функциональность?

редактировать #2: Это просто Примечание Для таких людей, как я, которые никогда не использовали настройки раньше. Настройки довольно полезны, но мне пришлось сделать целую кучу копания, чтобы выяснить, что происходит (исходя из мира Python, а не то, что я тоже использую). Все усложнилось, так как я хотел сохранить словари и, по-видимому, они не могут быть сериализованы. Настройки Также, кажется, хранятся в 3 разных файлах в зависимости от того, что вы делаете. Существует app.config, user.config и . Так вот еще две ссылки, которые я нашел полезными:

4 52

4 ответа:

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

Если вы не сделали этого раньше, просто щелкните правой кнопкой мыши на проекте и выберите Свойства. Выберите вкладку Настройки. Убедитесь, что вы выбрали "пользователь" для области (в противном случае параметр доступен только для чтения).

код для доступа к этому прост:

forms.Width = Application1.Properties.Settings.Default.Width;

Если вам нужно сохранить его:

Application1.Properties.Settings.Default.Width = forms.Width;
Application1.Properties.Settings.Default.Save();

В приведенном выше примере Width - это имя пользовательского параметра, которое вы определяете на вкладке Настройки и Приложение1 пространство имен вашего приложения.

Edit: отвечая на дальнейшие вопросы

вы упомянули, что хотите хранить объекты словаря в настройках. Как вы обнаружили, Вы не можете сделать это напрямую, потому что объекты словаря не сериализуемый. Тем не менее, вы можете создать свой собственный сериализуемый словарь довольно легко. У пола Вельцера был отличный пример в своем блоге.

У вас есть несколько ссылок, которые вроде как мутная ситуация немного. Ваш исходный вопрос заключается в том, где сохранить "файлы предпочтений пользователя". Я почти уверен, что намерение Microsoft с функциональностью настроек именно таково... хранение пользовательских настроек кожи, вариантов компоновки и т. д. Это не означало, как общий репозиторий для данных приложения, хотя это может быть легко злоупотреблять таким образом.

данные хранятся в отдельных местах по уважительной причине. Некоторые параметры настройки приложения и доступны только для чтения. Это настройки, которые приложение должно функционировать, но не является специфичным для пользователя (например, URI для ресурсов приложения или, возможно, ставка налога). Они хранятся в приложении.конфиг.

пользовательские настройки хранятся в запутанном каталоге глубоко в папке User Document / Settings. По умолчанию хранятся в приложении.config (я думаю, не могу вспомнить наверняка с моей головы), но любые пользовательские изменения хранятся в их личной папке. Это предназначено для данных, которые изменяются от пользователя пользователь. (Под "пользователем" я подразумеваю пользователя Windows, а не пользователя вашего приложения.)

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

при запуске в качестве неадминистратора или на Vista, вы не можете писать в папку "Program files" (или любую подпапку).

правильное расположение для хранения предпочтений пользователя (заменить MyCompanyName и MyApplicationName с правильными именами, очевидно)

на диска:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\MyCompanyName\MyApplicationName"

или в реестре под ключ:

 HKEY_CURRENT_USER\Software\MyCompanyName\MyApplicationName

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

Если вам нужно общее место для всех пользователей, то:

  1. он будет работать только тогда, когда пользователь работает от имени администратора
  2. он не будет работать надежно на Vista
  3. вы должны заботиться обо всем самостоятельно (например, два пользователя, запускающие приложение на одном компьютере одновременно с помощью быстрого переключения пользователей).

и локации:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationCommonData) + "\MyCompanyName\MyApplicationName"

или в реестре под ключ:

 HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName

вы можете использовать изолированное хранилище. Вы можете изолировать по пользователю, сборке и / или домену.

введение в изолированное хранилище
http://msdn.microsoft.com/en-us/library/3ak841sy (VS.80).aspx

типы Isolation
http://msdn.microsoft.com/en-us/library/eh5d60e1(VS.80).aspx

лучшим вариантом кажется следующее:

Application.UserAppDataPath