Учебник по созданию shareware программ

         

Мудрое хранение настроек



Мудрое хранение настроек

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

В Windows существует два стандартных метода хранения конфигурационных данных приложений: INI-файлы и системный реестр.

Примечание
Примечание

Можно также размещать настройки своих программ в двоичных файлах — так, как это делали программы в эпоху DOS. Однако сегодня этот подход особой популярностью не пользуется.

INI-файлы были основным способом хранения параметров программ еще в Windows 3.1. Системный реестр, также существовавший в ней, почти не использовался (Windows NT 3.51, активно работавшая с реестром, была распространена не очень широко). Вследствие этого программисты писали свои программы так, чтобы они сохраняли свои конфигурационные данные только в INI-файлах.

С выходом Windows 95 ситуация изменилась. Корпорация Microsoft провозгласила системный реестр основным хранилищем настроек не только самой операционной системы, но и всех ее приложений. Соответственно, разработчикам программ для Windows рекомендовалось использовать для сохранения параметров своих продуктов системный реестр, а не INI-файлы.

Прошло более пяти лет — целая вечность в мире информационных технологий, — а INI-файлы так и не утратили своей актуальности. Ведь далеко не всегда системный реестр может быть оптимальным средством для хранения настроек программ.

Основное достоинство реестра, по мнению некоторых экспертов, — относительная сложность повреждения информации, хранящейся в нем, из-за действий неопытных пользователей. Да, конечно, в каталоге Windows есть утилита regedit.exe, с помощью которой можно делать с реестром почти все, что угодно, однако начинающему пользователю до нее добраться гораздо сложнее, чем до INI-файла, для модификации которого достаточно просто дважды щелкнуть по нему мышью. Кроме того, Windows автоматически создает резервные копии системного реестра, и в случае его неосторожного повреждения может самостоятельно восстановить его. Если же пользователь случайно удалит или переименует INI-файл, то никто, кроме самой программы, не позаботится о ее нормальном функционировании.

На практике INI-файлы вовсе не так беспомощны. Функции чтения INI-файлов в современных системах программирования устроены таким образом, что удаление или некорректная модификация INI-файлов почти всегда не оказывает какого-либо отрицательного влияния на работу программы. А уж если включить в нее несколько строк кода, с помощью которых будет проверяться корректность чтения параметров из INI-файлов, то надежности работы программы на этом участке ничего не будет угрожать.

В то же время INI-файлы как средство хранения настроек программы обладают значительными преимуществами.

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

Замечание 1
Замечание 1

Некоторые программы сохраняют свои настройки только в момент завершения работы — например, когда пользователь выбирает из меню File команду Quit или когда он нажимает кнопку с крестиком в заголовке главного окна. Однако такой подход является не совсем разумным, т. к. в случае некорректного завершения работы программы — в результате системного сбоя или отключения питания, все настройки, сделанные пользователем, пропадут, и при следующем запуске программы ему придется заново задавать все параметры. Поэтому запись всех настроек в INI-файл или системный реестр нужно производить, не откладывая — например, после нажатия кнопки ОК в диалоговом окне изменения параметров приложения.

Во-вторых, программы, хранящие свои конфигурационные данные в INI-файле, а не в реестре, гораздо удобнее в использовании, если на компьютере присутствуют несколько версий Windows — например, большинство пользователей, устанавливая Windows 2000, сохраняют возможность загрузки Windows 98 или Windows ME — как говорится, "на всякий случай". Так как любая версия Windows работает со своим файлом системного реестра, то под каждой версией Windows программу, использующую реестр, нужно настраивать отдельно, что сильно раздражает. А вот если параметры хранятся в INI-файлах, то пользователь даже и не будет замечать, что в прошлый раз он работал с этой программой под другой версией Windows.

Описанное здесь преимущество INI-файлов также способно сэкономить много времени и при переустановках операционной системы, которые, как вы знаете, не редкость (некоторые даже рекомендуют переустанавливать систему регулярно, раз в два-три месяца — так сказать, для профилактики). После того как Windows инсталлирована заново, программы, хранящие свои конфигурационные данные в INI-файлах, даже не нужно переустанавливать и настраивать (если, конечно, они не копируют в каталог Windows\System собственные DLL-библиотеки). Это особенно полезно, если в настройках программы хранится большое количество важной информации. Например, файловый менеджер FAR размещает в системном реестре, помимо параметров собственной работы, логины и пароли доступа к FTP-сайтам. Если об этом забыть и не скопировать настройки программы из реестра при помощи поставляемого с FAR командного файла SaveSettings.bat, то при переустановке Windows вся эта информация будет просто потеряна.

А вот что в системном реестре организовано лучше — это работа с конфигурациями для разных пользователей. Достаточно просто сохранять параметры работы программы не в ветви HKEY_LOCAL_MACHINE, а в HKEY_CURRENT_USER, и Windows при старте будет автоматически загружать нужный набор параметров для соответствующего пользователя.

Для INI-файлов такого стандартного средства не существует. Однако можно легко решить эту проблему. Например, с помощью функций Windows API можно получать логин, под которым вошел в систему текущий пользователь, и все настройки для него хранить в файле вида <имя_пользователя>.ini. А если ваша программа функционально достаточно сложна, то можно написать для нее целый менеджер пользовательских профилей, наподобие входящего в Windows 2000 — опытные пользователи наверняка это оценят и будут уважать вашу программу еще больше.



Содержание раздела