Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

Registry.DeleteKey

Hello comp,

Необходимо полностью удалить ключ реестра. Следующий код отрабатывает
без ошибок, но результат сабжа=false. Подскажите, в чем ошибка

function DeleteRegistryKeySh(RootKey: HKEY; RegKeyName: string):boolean;
begin
Registry.RootKey:=RootKey;
Registry.OpenKey(RegKeyName, False);
Result:=Registry.DeleteKey(RegKeyName);
// Registry.DeleteValue(RegKeyName); также не удаляет значение ключа.
Registry.CloseKey;
end;

begin
...
DeleteRegistryKeySh(HKEY_CURRENT_USER, 'Software\MyProgram');
...
end;

Ответить   Mon, 29 Mar 2004 12:17:55 +0600 (#114057)

 

Ответы:

Пара OpenKey/CloseKey не нужна. Убери и все заработает.
Номер выпуска : 2725
Возраст листа : 189 (дней)
Количество подписчиков : 382
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/114170
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Mon, 29 Mar 2004 13:17:48 +0400 (#114170)

 

Hello Емельянов,

Monday, March 29, 2004, 3:17:48 PM, you wrote:

Убрала. Не заработало:(

Ответить   Tue, 30 Mar 2004 07:59:30 +0600 (#114663)

 

Здрям!

string):boolean;

Попробуй вместо RootKey: HKEY передавать в функцию var RootKey:TRegistry;
тогда и строка Registry.RootKey:=RootKey; будет не нужна, возможно именно
здесь "собака и порылась". ))
Второе не понятно какой вид имеет RegKeyName - должно быть
"HKEY_USERS\Softvare\mykey" т.е. полный путь.

С уважением monah
e-mail : janal***@n*****.ru
сайт : http:\\janalex.narod.ru
--
Номер выпуска : 2730
Возраст листа : 190 (дней)
Количество подписчиков : 382
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/114738
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Tue, 30 Mar 2004 12:25:18 +0700 (#114738)

 

Здравствуйте, Лилия.

Может быть проблема в том, что ключ не пустой? Тогда нужно рекурсивно
обходить все элементы.
Если не понятно, напишите на личный.

Ответить   Болюба Георгий Tue, 30 Mar 2004 10:13:18 +0400 (#114752)

 

Здравствуйте, Lilya.

Вы писали 29 марта 2004 г., 9:17:55:


У меня все работает !!!!

Из твоего примера не ясно от кула ты берешь Registry ???
Это у тебя модуль или переменная. Если этим ты хочешь сказать, что что
модуль, то ты не права. Т.к. для работы с реестром так не делается.
Сначала надо в USES-е подключить этот модуль Registry.
Затем описать переменную типа ТRegistry, наприме MyReg : ТRegistry
Если эта переменная нужна только в одной функции, значит там ее и
описывай, если же ты планируешь работать с реестром в всей проге,
тогда надо глобально описывать.
Далее тебе надо ее один раз покритать, например при старте программы в
OnCreate. И не забыть ее удалить при закрытии программы или если она
тебе больше не нужна.
Вот рабочий код на удаление ключа относительно твоего примера.
И ОБСАЛЮТНО НЕ ВАЖНО, ЕСТЬ ЛИ У ЭТОТ КЛЮЧА ПОДКЛЮЧИ И/ИЛИ ПАРАМЕТРЫ.
Функция DeleteKey удаляет весь
указанный ключ со всем его содержимым. Кстати, при этом надо
учитывать права доступа к реестру и к твоим ключам, т.к. в NT-шке (NT
4.0/2000/XP/2003) устанавливается уровень доступа пользователей как ко
всему реестру, так и к отдельным его ключам.

function DeleteRegistryKeySh(RootKey: HKEY; RegKeyName: string):boolean;
var
Reg : TRegistry;
Res : boolean;

begin
Reg := TRegistry.Create;
Reg.RootKey := RootKey;
Res := Reg.DeleteKey('Software\Тут может буть "русский текст в
кавычках"\Naladka');
// Res := Reg.DeleteKey(RegKeyName);
Reg.Free;
end.

В результате в переменную Res будет записан результат выполнения
удаления, т.е. TRUE.

Удачи... :-)

--
С уважением,
Feniks mailto: feni***@b*****.ua
Номер выпуска : 2732
Возраст листа : 190 (дней)
Количество подписчиков : 382
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/114884
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Feniks Tue, 30 Mar 2004 12:01:49 +0300 (#114884)

 

Hello Feniks,

Tuesday, March 30, 2004, 3:01:49 PM, you wrote:

всем большое спасибо за помощь и отзывчивость:)
Все заработало.

...скип...

Я привела только кусок кода. Redistry - это глобальная переменная.
Естественно, я ее создавала, не стала только приводить этого в письме.
...скип...

тем не менее, проблема была в том, что не удаляется непустой ключ.
Сделала, как посоветовал Болюба Георгий, удаляя с нижнего элемента.

...скип...

и вам:)

Ответить   Tue, 30 Mar 2004 16:57:21 +0600 (#114965)

 

Здравствуйте.

Самое интересное, что я откатал пример без рекурсии у себя на работе
на 3-х тачках. Работает на 1-й :) С рекурсией работает на всех :).

ИМХО мистика...

Ответить   Болюба Георгий Tue, 30 Mar 2004 15:44:44 +0400 (#114992)

 

Не хотелось захламлять лист, но погода что-ли располагает :).

1. ключ не удаляется, если он кем-то открыт - это естественно
2. на Win95/98 функция RegDeleteKey может удалить
ключ с подключами, а на Win NT/2000/... не
может (см. документацию)
3. ключ не удаляется, если на это нет прав, но это почти
наверняка не имеет места в аналогичных случаях
4. TRegistry.DeleteKey, по крайней мере, начиная с
Delphi 3.02, удаляет ключи рекурсивно и,
как следствие, работает на любой
платформе

Объяснить, почему у автора вопроса TRegistry.DeleteKey
сработала только при явном использовании
рекурсии, я не могу.

--
Номер выпуска : 2735
Возраст листа : 190 (дней)
Количество подписчиков : 382
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/115008
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Tue, 30 Mar 2004 16:00:52 +0400 (#115008)