Re: Delphi: save registry keys : what's wrong with this code?


[ Related Articles and Replies ] [ DelphiLand Discussion Forum ]

Posted by webmaster Guido on December 02, 2002

In Reply to: save registry keys : what's wrong with this code? posted by P12160 Stefan Loeners on November 28, 2002:

: I am trying to save a registry key in Delphi, with all subkeys and values to a file. The file is created but it is empty. I use Delphi 5 Enterprise and NT4.
: Thank you.

: procedure TForm1.Button1Click(Sender: TObject);
: const
: sFileName:string = 'c:\temp\_regsaveok';
: sRegString:string= '\Software\ABBYY';
: var
: Form1: TForm1;
: Registry1:TRegistry;
: begin
: // delete file if it exists (SaveKey will NOT work if file exists !!!)
: if FileExists(sFilename) then deletefile (sFilename);
: Registry1 := TRegistry.create;
: With Registry1 do begin
: RootKey:= HKEY_LOCAL_MACHINE;
: if SaveKey(sRegString,sFilename) = false then showmessage ('NOT ok');
: free;
: end;
: end;
----------------------

Just tested SaveKey() on a Windows 98 system and it works fine. Here's an exact copy of the code, copied-and-pasted straight from Delphi's editor:

procedure TForm1.Button1Click(Sender: TObject);
const
  sFileName = 'c:\temp\test';
  sRegString = 'Software\Borland\Delphi';
var
  Reg: TRegistry;
begin
  if FileExists(sFilename) then begin
    FileSetAttr(sFilename, 0); // clear Read-Only and Hidden flags
    Deletefile(sFilename);
  end;
  Reg := TRegistry.Create;
  try
    Reg.RootKey:= HKEY_LOCAL_MACHINE;
    if Reg.SaveKey(sRegString, sFilename) then
      Showmessage('Saved: ' + sFilename)
    else
      Showmessage('NOT saved');
  finally
    Reg.Free;
  end;
end;


 

Sorry, I really have no clue about what could be wrong in your case. Here are some loose ideas:

- I had no NT system available right now, but I suppose that NT is not the cause of your problems. Anyway, to be sure, you could try the code on a Win95/98/ME or XP system to see if there is a difference.

- The saved file is a read-only, hidden *binary* file, so it might seem empty when opened with a text-editor. You could check its contents with a hex-viewer. Or maybe save various items, some small and some big, and check that the filesizes are different:
HKEY_LOCAL_MACHINE\Software\Borland\Delphi     = 8 KB
HKEY_LOCAL_MACHINE\Software\MicroSoft     > 1.5 MB ;)

- On the Win98 system, SaveKey truncates the filename to 8 characters, e.g. _regsaveok becomes _regsave. Don't know if this happens also with NT4, but make sure anyway that you are looking at the right file.


Related Articles and Replies:


[ DelphiLand Discussion Forum ]