использовать метод CreateSubKey() (который автоматически предоставляет доступ к ключу для чтения-записи через возвращаемую ссылку):

RegistryKey Hklm = Registry.LocalMachine;

RegistryKey HkSoftware = Hklm.OpenSubKey('Software');

RegistryKey HkMine = HkSoftware.CreateSubKey('MyOwnSoftware');

Способ работы CreateSubKey() достаточно интересен: он будет создавать ключ, если тот еще не существует, а если уже существует, то будет возвращать экземпляр RegistryKey, который представляет существующий ключ. Причина такого поведения метода состоит в способе использования реестра. Реестр в целом содержит долговременные данные, например, конфигурационную информацию для Windows и различных приложений. Поэтому не очень часто возникает ситуация, когда необходимо явно создать ключ.

Более распространена ситуация, когда приложению необходимо убедиться, что некоторые данные присутствуют в реестре, другими словами, создать соответствующие ключи, если они еще не существуют, но ничего не делать, если они существуют. Метод CreateSubKey() прекрасно с этим справляется. В отличие, например, от ситуации с FileInfo.Open() у CreateSubKey() нет возможности случайно удалить какие-либо данные. Если целью действительно является удаление ключей реестра, то необходимо явно вызвать метод RegistryKey.Delete(). Это имеет смысл с учетом важности реестра для Windows. Меньше всего хотелось бы полностью разрушить Windows, удалив пару важных ключей во время отладки обращений к реестру в C#.

Когда ключ реестра для чтения или модификации найден, можно использовать методы SetValue() или GetValue() для задания или получения из них данных. Оба эти метода получают в качестве параметра строку, задающую имя значения, a SetValue() требует дополнительно ссылку на объект, содержащий детали значения. Так как параметр определяется как объектная ссылка, то он может действительности быть ссылкой на любой класс по желанию. SetValue() будет определять по типу реально предоставленного класса, как задать значение REG_SZ, REG_DWORD или REG_BINARY. Например:

RegistryKey HkMine = HkSoftware.CreateSubKey('MyOwnSoftware');

HkMine.SetValue('MyStringValue', 'Hello World');

HkMine.SetValue(MyIntValue', 20);

Этот код задает для ключа два значения: MyStringValue будет иметь тип REG_SZ, а MyIntValue — тип REG_DWORD. В последующем примере будут рассмотрены только эти два типа.

RegistryKey.GetValue() работает по большей части таким же образом. Он определен для возврата объектной ссылки, а значит, он может на самом деле вернуть ссылку на string, если обнаружит значение типа REG_SZ, и int, если это значение имеет тип REG_DWORD:

string StringValue = (string)HkMine.GetValue('MyStringValue');

int IntValue = (int)HkMine.Get.Value('MyIntValue');

И наконец, по окончании чтения или модификации данных ключ необходимо закрыть:

HkMine.Close();

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

Свойства

Имя свойства Назначение
Name Имя ключа (только для чтения)
SubKeyCount Число потомков этого ключа
ValueCount Сколько значений содержит ключ

Методы

Имя Назначение
Close() Закрывает ключ
CreateSubKey() Создает подключ с заданным именем (или открывает его, если он уже существует)
DeleteSubKey() Удаляет заданный подключ
DeleteSubKeyTree() Рекурсивно удаляет подключ и всех его потомков
DeleteValue() Удаляет именованное значение из ключа
GetSubKeyNames() Возвращает массив строк, содержащих имена подключей
GetValue() Возвращает именованное значение
GetValueNames()
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату