При проектировании способов хранения настроек своей программы следует задаться тремя вопросами:
Что хранить?
Где хранить?
Как хранить?
Поскольку первая часть вопроса нам известна по определению, т.е. хранить мы будем настройки программы, то перейдем ко второй части вопроса. Ваша программа устанавливается на компьютер а пользуются ей пользователи. Соответственно все настройки разделяются на две части а то и на все три - настройки которые относятся к компьютеру в целом, настройки которые относятся ко всем локальным пользователям, настройки которые относятся к конкретному пользователю. В зависимости от специфики программы первая и вторая часть могут быть совмещены или разделены. Поэтому важно сделать логическое разделение - какие настройки вашей программы действительно специфичны для самого ПК, какие настройки должны прилагаться ко всем пользователям, какие должны прилагаться к конкретному пользователю.
Обычно приходит на ум:
Хранить настройки в системном реестре.
Хранить настройки в каталоге куда установлена программа.
Хранить настройки в системном каталоге Windows.
Хранить настройка в домашнем каталоге пользователя.
Хранить настройки в корне диска
В Windows имеется три места предназначенных для хранения настроек которыми и следует пользоваться.
Системный реестр.
Домашний каталог пользователя (точнее один из его подкаталогов).
Общий каталог для пользователей.
Прочие мысли о местах хранения настроек должны быть выброшены из голов как вредные и противоестественные. Для тех кто не понимает почему, объясняю. На нормальной ОС (W'NT, W'2K) программа обычно запускается от имени и с правами конкретного пользователя. Обычно, если этот пользователь не является администратором, он имеет право изменять содержимое следующих ресурсов:
часть реестра HKEY_CURRENT_USER\*
содержимое своего домашнего каталога.
содержимое временного каталога (который как правило находится внутри домашнего).
содержимое некого каталога или каталогов специально выделенного для этого администратором.
При нормальном (читайте параноидальном) администрировании системы прочие места либо доступны только в режиме чтения, либо вообще недоступны. В том числе и папки \Program Files и Windows. Посему любая попытка программы изменять любые файловые ресурсы окромя вышеуказанных черевата тем что ее (программу) и его (пользователя) пошлют подальше. Причем далеко не в самой вежливой форме.
Реестр Windows (системный реестр) — иерархически построенная база данных параметров и настроек в большинстве операционных систем Microsoft Windows.
Ключи реестраПараметры реестраЗначения параметров
С точки зрения хранения настроек программы системный реестр разделен на две части. Это ветви HKEY_CURRENT_USER для хранения настроек специфичных для пользователя, и HKEY_LOCAL_MACHINE для хранения настроек специфичных для всего ПК и соответственно всех пользователей, работающих с этим ПК.
Рекомендуемая структура ветвей для хранения настроек программы - HKEY_CURRENT_USER\Software\Company Name\Application Name\Version и соответственно HKEY_LOCAL_MACHINE\Software\Company Name\Application Name\Version. Программе следует расчитывать на то что нужных ей ключей может не оказаться в реестре или значения лежащие в реестре имеют неверный формат или недопустимые значения. В таком случае, вместо несуществующих или неверных значений настройки, программа должна использовать значения по умолчанию которые разработчик может жестко забить в код или получить с помощью различных системных функций. Не следует использовать системный реестр для хранения больших кусков данных. Вместо этого лучше хранить объемные данные в отдельном файле, а в реестре запомнить имя этого файла. Long values (more than 2,048 bytes) should be stored as files, with the locations of the files stored in the registry.