Примечание. Все упоминаемые в статье модули, функции и т.п. относятся к Delphi.
Нижеприведенный текст являет собой вольное изложение отдельных статей февральского выпуска Microsoft Platform SDK. Год 2001 от рождества Христова. При проектировании способов хранения настроек своей программы следует задаться тремя вопросами:
- Что хранить?
- Где хранить?
- Как хранить?
Что хранить
Поскольку первая часть вопроса нам известна по определению, т.е. хранить мы будем настройки программы, то перейдем ко второй части вопроса. Ваша программа устанавливается на КОМПЬЮТЕР а пользуются ей ПОЛЬЗОВАТЕЛИ.
Соответственно все настройки разделяются на две части а то и на все три — настройки которые относятся к компьютеру в целом, настройки которые относятся ко всем локальным пользователям, настройки которые относятся к конкретному пользовател. В зависимости от специфики программы первая и вторая часть могут быть совмещены или разделены. Поэтому важно сделать логическое разделение — какие настройки вашей программы действительно специфичны для самого ПК, какие настройки должны прилагаться ко всем пользователям, какие должны прилагаться к конкретному пользователю. Кроме того Мокрософт рекомендует чтобы настройки учитывали возможную мобильность пользователя, т.е. для пользователя находящегося в разных местах, возможно потребуется иметь разные наборы настроек.
Как исправить MSCONFIG, не сохраняющий изменения в Windows 11/10
Где хранить
Вообще в голову приходят три вещи.
- Хранить настройки в системном реестре.
- Хранить настройки в каталоге куда установлена программа.
- Хранить настройки в системном каталоге Windows.
- Хранить настройка в домашнем каталоге пользователя.
- Системный реестр.
- Домашний каталог пользователя (точнее один из его подкаталогов).
- Общий каталог для пользователей.
- часть реестра HKEY_CURRENT_USER*
- содержимое своего домашнего каталога.
- содержимое временного каталога (который как правило находится внутри домашнего).
- содержимое некого каталога или каталогов специально выделенного для этого администратором.
Системный реестр
С точки зрения хранения настроек программы системный реестр разделен на две части. Это ветви HKEY_CURRENT_USER для хранения настроек специфичных для пользователя, и HKEY_LOCAL_MACHINE для хранения настроек специфичных для всего ПК и соответственно всех пользователей, работающих с этим ПК.
Рекомендуемая структура ветвей для хранения настроек программы — HKEY_CURRENT_USERSoftwareCompany NameApplication NameVersion и соответственно HKEY_LOCAL_MACHINESoftwareCompany NameApplication NameVersion. Параметры Company Name, Application Name, Version желательно не хранить в виде hard-coded строк в коде программы а устанавливать в опциях проекта (ProjectOptionsVersion Info) и доставать впоследствии из ресурса с помощью той же библиотеки RxLib.
Альтернативный путь выбирать данные о версии программы из ресурсов — использование Windows API (GetFileVersionInfo, GetFileVersionInfoSize, VerQueryValue). Программе следует расчитывать на то что доступ к подключам HKEY_LOCAL_MACHINE разрешен в режиме только для чтения, а доступ к подключам HKEY_CURRENT_USER допускает чтение, изменение и создание новых подключей и значений.
Реестр не сохраняет изменения, РЕШЕНО!!!
Программе следует расчитывать на то что нужных ей ключей может не оказаться в реестре или значения лежащие в реестре имеют неверный формат или недопустимые значения. В таком случае, вместо несуществующих или неверных значений настройки, программа должна использовать значения по умолчанию которые разработчик может «железно забить в код» или получить с помощью различных системных функций. Не следует использовать системный реестр для хранения больших кусков данных. Вместо этого лучше хранить объемные данные в отдельном файле, а в реестре запомнить имя этого файла.
Домашний каталог пользователя
Для хранения настроек слишком больших для того чтобы их размещать в реестре существуют специально выделенные каталоги внутри домашнего каталога пользователя. Эти каталоги обычно называются «специальными каталогами» и имеют имена Application Data и Local Settings. Полный путь к ним можно получить с помошью функций SHGetSpecialFolderPath или SHGetFolderPath.
Общий каталог пользователей
Обычно это каталог «Documents and SettingsAll users». Внутри него имеются такие-же подкаталоги для хранения настроек и данных программ но относящихся ко всем пользователям. Полный путь к ним можно также получить с помошью функций SHGetSpecialFolderPath или SHGetFolderPath.
Как хранить
Системный реестр
Для работы с системным реестром можно использовать функции Registry API общим числом около 40 штук, а можно использовать классы из Registry.pas — TRegistry, TRegistryIniFile, TRegIniFile. Особенно следует обратить внимание на TRegistryIniFile который предоставляет упрощенную модель доступа к системному реестру очень схожую с моделью работы с INI-файлами.
Это старый метод хранения настроек программ, но все еще применяющийся программистами. Настройки хранятся в текстовом файле в виде:
[Section1] Field1=Value1 Field2=Value2 . FieldN=ValueN [Section2] Field1=Value1 Field2=Value2 . FieldN=ValueN . [SectionN] Field1=Value1 Field2=Value2 . FieldN=ValueN
Для доступа к данным содержащимся в INI-файлах существуют классы из модуля IniFiles — TIniFile, TMemIniFile. Преимущество использования INI-файлов состоит в том что их можно легко подредактировать с помощью текстового редактора. Они обычно легче воспринимаются для прочтения нежели дерево ключей системного реестра.
Бинарные файлы настроек
Отдельно хочется поговорить о использовании бинарных файлов в качестве хранилища для настроек программы. Обычные мотивы любителей использовать бинарные файлы:
- Экономится место.
- Настройку можно спрятать от пользователя (сделать нечитабельной).
Первое глупо потому что информация о настройке занимает обычно немного места и экономия достигается мизерная. Второе глупо потому что невозможность просмотра и редактирования настроечных данных простыми средствами (текстовый редактор) или встроенными (редактор реестра) создает больше проблем как пользователю так разработчику, нежели пользы (причем весьма сомнительной) от того что кто-то не сможет прочитать что написано в файле. Кроме того использование бинарного файла нельзя назвать защитой от нежелательного просмотра, т.к. любой «продвинутый пользователь» все равно с помощью редактора бинарных файлов сможет просмотреть и разобраться в содержимом настройки.
Заключение
Почти вся эта информация была вычерпана из кладезя мудрости под названием Platform SDK (Software Development Kit), поставляемого в составе сборника документации MSDN (Microsoft Software Developer Network). Разработчикам настоятельно рекомендуется приобрести Platform SDK, это снимает огромную массу вопросов связанную с программированием под Windows.
Источник: codenet.ru
Где и как правильно хранить настройки программы?
Программа на С# (но в принципе это не столь важно), до этого использовал стандартный app.config, быстро удобно, но его возможностей стало не хватать. Во первых параметров стало много: сохранение состояний всех окон, некоторых контролов, настройки самой программы, настройки подключения к серверу, которые надо шифровать ну и т.д. В общем решил написать свой велосипед, теперь думаю где это все хранить, и соответственно как реализовать.
На данный момент склоняюсь к созданию своего класса настроек и его бинарной сериализацией, но вот вопрос, где его хранить? Не хотелось бы его держать в папке с программой, и для каждого пользователя иметь отдельные настройки.
Отслеживать
задан 3 авг 2011 в 8:39
1,935 13 13 серебряных знаков 27 27 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Тогда храните в профиле текущего пользователя. А сериализацию лучше делать через xml, чтобы при необходимости можно было поправить конфиг руками.
Отслеживать
ответ дан 3 авг 2011 в 9:07
8,835 25 25 серебряных знаков 65 65 бронзовых знаков
Так и сделаю. Вот еще инфа по теме: habrahabr.ru/blogs/development/70922
3 авг 2011 в 11:10
На форуме был уже похожий вопрос, посмотрите, возможно найдете полезным
Отслеживать
ответ дан 3 авг 2011 в 10:09
Pavel Azanov Pavel Azanov
6,744 16 16 серебряных знаков 31 31 бронзовый знак
- c#
- config
- settings
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник: ru.stackoverflow.com
Как сохранить настройки программ
Обычно после переустановки ОС перед нами встает один важный вопрос: с чего же начать? Тут главное – в короткий срок установить вновь все те программы, которые вам необходимы для работы. Для решения этой задачи существуют специальные программы.
Статьи по теме:
- Как сохранить настройки программ
- Как сохранить настройки при переустановке Windows
- Как сохранить настройки utorrent
Инструкция
Найдите в сети интернет программу Niksaver, скачайте ее с одного из сайтов или файлообменников и установите ее на свой компьютер. Установка несложная и интуитивно понятная – выберите нужный каталог и нажмите кнопку «Готово» (Finish).
Запустите программу. В левой части окна программы Niksaver вы увидите список найденных программ, установленных на вашем компьютере и соответствующих внутренней базе данных Niksaver.
В списке программ отметьте галочкой одну или несколько программ, настройки которых вы хотите зарезервировать. После того как вы сделаете необходимые отметки, нажмите на пиктограмму с изображением дискетки для того, чтобы сохранить настройки выбранных программ.
Измените путь к директории для сохранения файлов настроек программ на тот, что вам будет более удобен (по умолчанию путь стоит следующий: C:Documents and SettingsuserМои документыComputer Configuration).
Убедитесь, что сохранение настроек программ прошло успешно. Если в ходе экспорта настрое никаких ошибок не произошло, то напротив названия программы в списке будет отображаться зеленая галочка. Если же программой были обнаружены какие-либо ошибки при сохранении, то напротив названия программы-объекта будет отображен красный крестик.
Вы можете также пополнить список программ для экспортирования их настроек. Для этого в строке меню выберите пункт «Инструменты» (Tools) и далее выберите «Редактор конфигов» (Edit Configs). В открывшемся меню выберите программу из списка установленных на вашем компьютере программ, после чего укажите программе Niksaver ключи реестра и файлы настроек, относящиеся к выбранной программе.
Для того чтобы восстановить данные, кликните на пиктограмму папки со стрелочкой (Загрузить настройки) и укажите программе путь к нужному файлу настроек.
Источник: www.kakprosto.ru