Я не могу удалить ключ реестра в коде из Delphi - PullRequest
1 голос
/ 26 июня 2011

Win7x64, DelphiXe.Написал программу, которая регистрирует апплет панели управления (как здесь рекомендуют: http://msdn.microsoft.com/en-us/library/bb757044.aspx). Все отлично работает, апплет нормально регистрируется, отображается и запускается.

Но при удалении ключазарегистрировать, где оно зарегистрировано:

HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows \ CurrentVersion \ Explorer \ ControlPanel \ NameSpace \ {0052D9FC-6764-4D29-A66F-2F3BD9E2BB40}

1010* ничего не происходит:

Создать:

...
var reg1:tregistry;key:string;
begin
key:='SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\ {0052D9FC-6764-4D29-A66F-2F3BD9E2BB40}';
reg1:=tregistry.Create;
reg1.RootKey:=HKEY_LOCAL_MACHINE;
reg1.Access: = KEY_WOW64_64KEY + KEY_ALL_ACCESS;
if reg1.Openkey(key,true)=true then showmessage('ok');
reg1.Closekey;
reg1.free;
end;

Удалить:

procedure TForm1.Button1Click (Sender: TObject);
    var reg1:tregistry; key:string;
    begin
    reg1: = tregistry.Create;
    reg1.RootKey: = HKEY_LOCAL_MACHINE;
    reg1.Access: = KEY_WOW64_64KEY + KEY_ALL_ACCESS;
    key: ='SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\{0052D9FC-6764-4D29-A66F-2F3BD9E2BB40}';
    if reg1.KeyExists (Key)=true then Showmesage ('Key exists'); // work
    if reg1.DeleteKey (Key)=true then Showmesage ('Ok'); // ! not work !
    Showmesage (inttostr(getlasterror)); // show "0"
    reg1.Free;
    end;

Ошибки любые не выделяются, но ключ не уходит. Программа запускаетсяиз-под учетной записи админа (+ тоже создает этот ключ). Через Regedit.exe ключ виден и можно удалить.

Что может помешать удалению?: (

1 Ответ

6 голосов
/ 26 июня 2011

Попробуйте:

IF reg1.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace') THEN TRY
  reg1.DeleteKey('{0052D9FC-6764-4D29-A66F-2F3BD9E2BB40}')
FINALLY
  reg1.CloseKey
END;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...