[ Nemanja_666 @ 23.12.2007. 02:37 ] @
Radim neki program i potrebno mi je da uradim backup nekih kljuceva u registriju.

Probao sam na dva nacina:

Code:

var
  Reg : TRegistry;
begin
  Reg := TRegistry.Create;
  Reg.Rootkey := HKEY_CURRENT_USER;
  Reg.Savekey('\Software\Blablabla', 'blablabla.reg');
end;


i

Code:

var
  RootKey, phKey: HKey;
  Key : string;
begin
  RootKey := HKEY_CURRENT_USER;
  Key := '\Software\Blablabla';
  RegOpenKeyEx(RootKey, PChar(Key), 0, KEY_ALL_ACCESS, phKey);
  RegSaveKey(phKey, PChar('test.reg'), nil);
  RegCloseKey(phKey);
end;


Program pokren sa administratorskim provilegijama (na visti) i nikad mi ne uradi sta se ocekujem :)

Ako ima neko resenja osim:

Code:

  ShellExecute(Handle, 'open', PChar('regedit.exe /e Key Filename'), '', sw_hide) ;


Pozz
[ savkic @ 23.12.2007. 11:08 ] @
> Radim neki program i potrebno mi je da uradim backup nekih kljuceva u registriju.

Koje greške dobijaš, možeš saznati sa GetLastError ili RaiseLastOSError.
Pokušaj da stavke otvaraš sa KEY_READ pravom pristupa ne sa KEY_ALL_ACCESS.
[ Nemanja_666 @ 23.12.2007. 13:23 ] @
Pokusao sam sa KEY_READ i nije opet radilo.
Greska koju dobijem kad koristim funkciju koju se spomenuo gore je "A call to an OS function fail"
[ savkic @ 23.12.2007. 15:27 ] @
> Greska koju dobijem kad koristim funkciju koju se spomenuo gore je "A call to an OS function fail"

Posle koje fukcije? Da li tvoj proces ima SE_BACKUP_NAME privilegiju?

Code:

var
  RootKey, phKey: HKey;
  Key : string;
  lRet: Longint;
begin
  RootKey := HKEY_CURRENT_USER;
  Key := 'Software\BitTorrent';
  lRet := RegOpenKeyEx(RootKey, PChar(Key), 0, KEY_READ, phKey);
  if lRet = ERROR_SUCCESS then
  begin
    lRet := RegSaveKey(phKey, PChar('C:\test.reg'), nil);
    if lRet <> ERROR_SUCCESS then
      raise Exception.Create(SysErrorMessage(lRet));
  end
  else
    raise Exception.Create(SysErrorMessage(lRet));
end;

[ Nemanja_666 @ 23.12.2007. 18:19 ] @
> Da li tvoj proces ima SE_BACKUP_NAME privilegiju?

Ocito nema. Greska sa ovim tvojim kodom "A required privilege is not held by the client".

Ako znas pomozimi kako da ovo resim.
[ savkic @ 23.12.2007. 20:17 ] @
Downloaduj JCL i pozovi JclSecurity.EnableProcessPrivilege(True, 'SeBackupPrivilege');
[ Nemanja_666 @ 23.12.2007. 21:07 ] @
Hmmm nisam se sjetio toga.
Idem sad malo plofetati kako to radi.
Hvala.