Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Удаление ключа реестра C++

23K
12 января 2012 года
1_2
34 / / 09.01.2012
К примеру нужно удалить ключ реестра HKCU\\Software\\RegistrySample\Test string (он не пустой). Я пушу так:
#include <iostream>

HKEY hKey;
RegOpenKey(HKEY_CURRENT_USER, L"\\Software\\RegistrySample", &hKey);
if (RegDeleteKey(hKey, L"Test string") != ERROR_SUCCESS)
FatalAppExitA(1, "При удалении ключа произошла ошибка");
RegCloseKey(hKey);
Но почему-то ключ не удаляется. Пишется созданное мной сообщение "При удалении ключа произошла ошибка". 1.В чём ошибка? 2. Как получить(заполнить) HKEY hKey?
240
12 января 2012 года
aks
2.5K / / 14.07.2006
Выводите сообщение об ошибке по коду. Там все будет написано. Почитайте мануал по функции и по FormatMessage.
20K
12 января 2012 года
sem2711
124 / / 23.09.2009
Ошибка первая в том, что вы не проверяете успех/неуспех функции RegOpenKey(...) и не проверяете значение хэндла hKey, заполняемого ею. Если бы вы это сделали, то увидели бы, что hKey == NULL, соответственно, вызов функции RegDeleteKey заканчивается неудачей с кодом ошибки 6 (ERROR_INVALID_HANDLE). А причина всего этого в том, что в строковом параметре функции RegOpenKey нужно убрать первый бэкслэш (ну, то есть начинаться должно сразу с Software). Вот и все!
7
12 января 2012 года
@pixo $oft
3.4K / / 20.09.2006
SHDeleteKey :trollface:
23K
13 января 2012 года
1_2
34 / / 09.01.2012
Исправил, но всё равно не работает( ("При удалении ключа произошла ошибка")

HKEY hKey;
if (RegOpenKey(HKEY_CURRENT_USER, L"Software\\RegistrySample", &hKey) != ERROR_SUCCESS)
FatalAppExitA(1, "При открытии ключа произошла ошибка");
if (RegDeleteKey(hKey, L"Test string") != ERROR_SUCCESS)
FatalAppExitA(1, "При удалении ключа произошла ошибка");
RegCloseKey(hKey);

По-моему ф-ия RegDeleteKey написана правильно... SHDeleteKey - выносит куст(не подходит). В чём же опять ошибка?
20K
13 января 2012 года
sem2711
124 / / 23.09.2009
В RegDeleteKey() не указывайте имя параметра "Test string". Вместо этого укажите пустую строку. Да, и еще. Не используйте явно литеру L для указания на юникодную строку и не используйте явно анси- или юникод-варианты функций (если вы пишете, используя Win32 API). Лучше "оберните" все строки макросом TEXT() и используйте типы TCHAR, LPTSTR, LPCTSTR, а также функции без литер W или A в конце (кроме некоторых функций, которые существуют только в юникод-версии).
14
13 января 2012 года
Phodopus
3.3K / / 19.06.2008
Итак, для начала посмотрим сюда еще раз.
20K
13 января 2012 года
sem2711
124 / / 23.09.2009
Цитата: sem2711
В RegDeleteKey() не указывайте имя параметра "Test string".


А у вас это параметр вообще или поддиректория? Может, я что-то не так понял? Если поддиректория, то ее имя указывать надо, но в поддиректории не должно содержаться никаких вложенных поддиректорий.

23K
14 января 2012 года
1_2
34 / / 09.01.2012
Test string - это параметр
7
14 января 2012 года
@pixo $oft
3.4K / / 20.09.2006
Так вы определитесь,ключ это у вас или значение.Про FormatMessage выше уже писали 1.5 раза
96K
24 октября 2015 года
Алексей Смиян
1 / / 24.10.2015
Сам столкнулся с той же проблемой. Решение оказалось неожиданным)
Ключ - Это папка в реестре (подкаталог) как я понял.
Значение (value) - это конкретная строка в каталоге (запись). Автор пытается убрать строчку судя по второму аргументу: RegDeleteKey(hKey, L"Test string")

В его случае стоит применить: RegDeleteValue(hKey, L"Test string");

Про ошибки:
1. Создал сообщение в которое вывел номер ошибки.
2. Правой кнопкой на слове ERROR_SUCCESS, Go To Definition. Находим ответ.
Например в моем коде выдало ошибку №2, -> ERROR_FILE_NOT_FOUND, что значит "Файл не найден"

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог