C#. Удаление значений (values) из ключа Реестра
Задача довольно простая, имеется ключ в разделе Реестра Windows, необходимо удалить оттуда все значения (values).
Реестр - иерархическая база данных, хранящая основные настройки системы и программ.
Корневой ключ (в некоторых источниках просто ключ или раздел Реестра), это один из основных ключей Реестра. Обычно присутствуют следующие:
HKEY_CLASSES_ROOT (HKCR)
- Зарегистрированные типы файлов, объекты COM и ActiveXHKEY_CURRENT_USER (HKCU)
- Настройки текущего пользователя, в данный момент вошедшего в систему.HKEY_LOCAL_MACHINE (HKLM)
- Общие настройки для всех пользователей данного компьютера.HKEY_USERS (HKU)
- Профили всех пользователей данной машины.HKEY_CURRENT_CONFIG (HKCC)
- Профили оборудования, информация о драйверах.Подключ/Subkey (иногда Ключ, если корневой раздел называется корневым разделом или корневым ключом) Реестра - путь в Реестре, аналогичный пути к каталогу (папке) файловой системы. Обычно каждый подключ хранит или настройки для конкретного случая. Например, настройки конкретной программы или профиль конфигурации оборудования. Выглядит примерно так:
Software\TestKey
(в полном виде, вместе с корневым ключом, например: HKEY_CURRENT_USER\Software\TestKey
).Подключ может содержать как и другие подключи, так и значения (values), представляющие собой поименованные переменные, содержащие значения конкретного параметра
Обзорная статья про Реестр Windows на Википедии
Для тестирования создадим тестовый ключ, который не будет влиять на какие либо программы и компоненты ОС. Это можно сделать, как вручную, с помощью программы Regedit, так и в автоматическом режиме, с помощью reg-файла, например, такого:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\TestKey]
"value0"="text0"
"value1"="text1"
"value2"="text2"
"value3"="text3"
"value4"="text4"
"value5"="text5"
Файл на GitHub
Можно создать и reg-файл для удаления тестового ключа из Реестра, если что-то пойдет не так:
Windows Registry Editor Version 5.00
[-HKEY_CURRENT_USER\Software\TestKey]
Файл на GitHub
1. Подключаем пространство имен
Microsoft.Win32:
using Microsoft.Win32;
2. Создаем переменную с именем подключа Реестра и переменную типа RegistryKey. Этот объект и будет рулить нужной веткой Реестра:
string subkey = "Software\\TestKey";
RegistryKey key = null;
3. Любые операции с Реестром могут привести к ошибкам, потому их как и операции ввода-вывода желательно оборачивать в
try..catch
:try
{
//тут будет код.
}
catch (Exception ex)
{
Console.WriteLine("ERROR: " + ex.Message);
}
4. Открываем (под)ключ Реестра:
key = Registry.CurrentUser.OpenSubKey(subkey, true);
Внимание! Если необходимо писать в ключ Реестра, обязательно устанавливаем второй параметр функции
OpenSubKey
в true
, т.к. в противном случае, мы получим ошибку UnauthorizedAccessException: Не удалось выполнить запись в раздел реестра.
Обсуждение на Cyberforum
5. Получить список значений в (под)ключе можно функцией
GetValueNames()
, которая выдает строковый массив с именами значений Реестра.6. Получаем имена всех значений и в цикле удаляем их с помощью функции
DeleteValue(имя_параметра);
foreach (string valname in key.GetValueNames())
{
Console.WriteLine("Delete value: " + valname);
key.DeleteValue(valname);
}
7. Закрываем (под)ключ Реестра.
key.Close();
Все получилось:
На PasteBin
Пример на GitHub
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2021/02/04/c-ud