Работа с реестром на C#

Приветствую всех, сегодня поговорим об одной интересной теме, работа с реестром.

Реестр Windows или системный реестр (Windows Registry) — иерархически построенная база данных параметров и настроек в большинстве операционных систем Microsoft Windows.
Реестр содержит информацию и настройки для аппаратного обеспечения, программного обеспечения, профилей пользователей, пред установки. Большинство изменений в Панели
управления, ассоциации файлов, системные политики, список установленного ПО фиксируются в реестре.

Windows хранит море информации о системе, настройках программ, пользователях и множество других данных в специальном хранилище— реестре. Существует возможность улучшить работу программ путем изменения параметров, содержащихся в реестре. В Интернете можно найти целый класс программ, называемых твикерами, в которых собраны различные полезные и интересные настройки, которые можно поменять в реестре, чтобы изменить функциональность программ. Не представляет труда самому написать такой
твикер при помощи управляемого кода.

Разделы реестра

  • HKEY_CLASSES_ROOT – содержит информацию о ассоциациях расширения файлов и зарегистрированных COM объектах.
  • HKEY_CURRENT_USER – содержит настройки для текущего пользователя.
  • HKEY_LOCAL_MACHINE – содержит настройки локального компьютера.
  • HKEY_USERS – содержит настройки пользователя по умолчанию.
  • HKEY_CURRENT_CONFIG – содержит информацию о настройках, которые не являются специфическими для пользователя.
  • HKEY_PERFORMANCE_DATA – содержит информацию о производительности программных компонентов.
  • HKEY_DYN_DATA – содержит динамические изменяемые данные реестра, на данный момент является устаревшим.

Пространство имен для работы с реестром using Microsoft.Win32;

Registry — это статический класс, предоставляющий эксклюзивный доступ к ключам реестра для простых операций.

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

Класс Registry предоставляет доступ к следующим разделам:

CurrentUser – Сохраняет сведения о пользовательских параметрах.

LocalMachine – Сохраняет сведения о конфигурации для локального компьютера

ClassesRoot – Сохраняет сведения о типах (и классах) и их свойствах.

Users – Сохраняет сведения о стандартной пользовательской конфигурации.

PerformanceData – Сохраняет сведения о производительности программных компонентов.

CurrentConfig – Сохраняет сведения об оборудовании, не являющемся специфическим для пользователя.

DynData – Сохраняет динамические данные (Считается устаревшим).

RegistryKey — класс реализует методы для просмотра дочерних ключей, создания новых или чтения и модификации существующих, включая установку уровней безопасности для них.

Чтение из реестра осуществляется при помощи метода GetValue, узел должен быть предварительно открыт при помощи метода OpenSubKey.

Запись данных в реестр осуществляется при помощи метода SetValue, узел должен существовать и быть предварительно открытым при помощи метода OpenSubKey с указанием признака «открытие для записи».

Выводим информацию о структуре реестра:

Навигация по реестру:

Редактирование реестра.

Добавляем запись.

Удаляем запись

Читаем ключи реестра:

Пример добавления программы в автозагрузку:

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

Пример поиска по реестру параметра по разделам с помощью рекурсии, к сожалению доступ к некоторым веткам запрещен, да же под админом, пришлось использовать try cath

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

Можно пойти 3 путями:

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

Как создать такой манифест читать <тут>

Еще очень важный момент если у вас 64бит система то путь сохранения будет отличатся от 32бит к примеру к разделу software, так как данные будут хранится в разделе Software\WOW6432Node. Что бы программа сохраняло по пути Software , можно использовать следующий код:

 

Обновлено: 09.11.2021 — 19:09

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.