Hicieron esta pregunta en CD y me parece interesante dejar aquí mi respuesta.
La API de Windows dispone de la función RegDeleteKey para realizar esa tarea, pero tiene un detalle, no borrará una clave si existe una subclave y era esto lo que originaba la cuestión. La solución es sencilla, buscar todas las subclaves del arbol y borrarlas, Así que eso hice en una función recursiva:
function DeleteRegistryKey(const RootKey: HKEY; const Key: String): Boolean; var Handle : HKEY; Subkey: array[0..255] of CHAR; // las claves no pueden extenderse más allá de 256 caracteres. PathKey: String; Index: integer; begin Result := False; if RegOpenKeyEx(RootKey, PChar(Key), 0, KEY_ALL_ACCESS or KEY_WOW64_64KEY, Handle) = ERROR_SUCCESS then begin Index:= 0; while ERROR_SUCCESS = RegEnumKey(Handle, Index, @Subkey[0], sizeof(Subkey)-1) do begin PathKey:= Key + '\' + String(Subkey); DeleteRegistryKey(RootKey, PathKey); inc(Index); end; RegCloseKey(Handle); if RegOpenKeyEx(RootKey, PChar(ExtractFilePath(Key)), 0, KEY_ALL_ACCESS or KEY_WOW64_64KEY, Handle) = ERROR_SUCCESS then begin Result := RegDeleteKey(Handle, PCHAR(ExtractFileName(Key))) = ERROR_SUCCESS; RegCloseKey(Handle); end; end else Result := False; end;
Espero que os sirva de algo.
Saludos.