Zwei sehr bedenkliche Sachen:
1.
registry2 wird ausserhalb der Prozedur erzeugt, aber innerhalb freigegeben.
2. Die erzeugte Stringliste wird nicht wieder frei gegeben.
Debug deinen Code doch mal bzw. bau eine ordentliche Fehlerbehandlung ein:
Delphi-Quellcode:
uses
Registry;
procedure Foobar;
var
reg: Tregistry;
sl: TStringList;
begin
reg := TRegistry.Create(KEY_READ);
try // try-finally Registry
reg.rootkey:= HKEY_LOCAL_MACHINE;
if reg.OpenKey('
Software\Borland', False)
then
begin
sl := TStringlist.Create;
try // try-finally Stringlist
try // try-except Registry + Stringlist
reg.GetKeyNames(sl);
sl.SaveToFile('
D:\test.txt');
except // try-except Registry + Stringlist
raise Exception.Create(SysErrorMessage(GetLastError));
end;
finally // try-finally Stringlist
sl.Free;
end;
reg.CloseKey;
end
else // raise exception if reg.OpenKey fails
raise Exception.Create(SysErrorMessage(GetLastError));
finally // try-finally reg
reg.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Foobar;
except
on E:
Exception do
ShowMessage(E.
Message);
end;
end;
Fehler korrigiert. Dummer
DP Debugger/Compiler.