Ключевым местом для хранения конфигурационных настроек в ОС Windows является реестр. Для просмотра реестра мы можем воспользоваться утилитой regedit. При запуске данная утилита отображает в графическом окне в древовидном виде все содержимое реестра:
Реестр хранит набор ключей, у которых имеется определенное значение. Ключи также могут содержать другие ключи.
Всего имеется пять ключей верхнего уровня, предназначенных для хранения различной информации:
HKEY_CLASSES_ROOT: хранит информацию об используемых в ос файлах, какие программы открывают тот или иной тип файлов, а также информацию о компонентах COM
HKEY_CURRENT_USER: хранит настройки для текущего пользователя в системе
HKEY_LOCAL_MACHINE: хранит информацию обо всех установленных программах
HKEY_USERS: хранит настройки для всех пользователей
HKEY_CURRENT_CONFIG: хранит информацию о конфигурации установленного оборудования
HKEY_DYN_DATA: хранит различные текущие данные
HKEY_PERFORMANCE_DATA: хранит информацию о производительности приложений
Для управления регистром в пространстве имен Microsoft.Win32 имеются два класса: Registry и RegistryKey.
Класс Registry позволяет получить доступ к ключам верхнего уровня реестра. А класс RegistryKey представляет отдельный ключ реестра.
При использовании этих классов необходимо учитывать древовидную иерархическую структуру реестра. Так получение ключа верхнего уровня
HKEY_LOCAL_MACHINE
, который содержит информацию об установленном на локальной машине программном обеспечении, происходит следующим образом:
RegistryKey localMachineKey = Registry.LocalMachine;
Класс Registry содержит еще ряд статических свойств, каждое из которых представляет соответствующий ключ верхнего уровня:
Registry.ClassesRoot
Registry.CurrentConfig
Registry.CurrentUser
Registry.DynData
Registry.Users
Registry.PerformanceData
Для управления ключами в реестре класс RegistryKey определяет ряд свойств и методов. Основные из них:
Name
: возвращает имя ключа реестра
Close()
: закрывает ключ
CreateSubKey()
: создает вложенный ключ, если он не существует
DeleteSubKey()
: удаляет вложенный ключ
DeleteValue()
: удаляет значение ключа
GetSubKeyNames()
: возвращает коллекцию имен вложенных ключей
GetValue()
: возвращает значение ключа
OpenSubKey()
: открывает вложенный ключ
SetValue()
: устанавливает значение ключа
Создадим свой ключ в реестре:
RegistryKey currentUserKey = Registry.CurrentUser; RegistryKey helloKey= currentUserKey.CreateSubKey("HelloKey"); helloKey.SetValue("login", "admin"); helloKey.SetValue("password", "12345"); helloKey.Close();
После этого в реестре мы сможем увидеть добавленный ключ и два его значения:
Создадим в ранее созданном ключе вложенный ключ:
RegistryKey currentUserKey = Registry.CurrentUser; RegistryKey helloKey= currentUserKey.OpenSubKey("HelloKey", true); RegistryKey subHelloKey = helloKey.CreateSubKey("SubHelloKey"); subHelloKey.SetValue("val", "23"); subHelloKey.Close(); helloKey.Close();
Значение true в вызове OpenSubKey("HelloKey", true);
позволяет открывать ключ с возможностью записи в него.
Считаем сохраненные в реестре значения:
RegistryKey currentUserKey = Registry.CurrentUser; RegistryKey helloKey= currentUserKey.OpenSubKey("HelloKey"); string login = helloKey.GetValue("login").ToString(); string password = helloKey.GetValue("password").ToString(); helloKey.Close(); Console.WriteLine(login); Console.WriteLine(password);
И в конце удалим значения из ключа и сам ключ из реестра:
RegistryKey currentUserKey = Registry.CurrentUser; RegistryKey helloKey= currentUserKey.OpenSubKey("HelloKey", true); // удаляем вложенный ключ helloKey.DeleteSubKey("SubHelloKey"); // удаляем значение из ключа helloKey.DeleteValue("login"); helloKey.Close(); // удаляем сам ключ currentUserKey.DeleteSubKey("HelloKey");