var
   reg:Tregistry;
begin
  reg:=Tregistry.Create;
  reg.rootkey:=HKEY_CURRENT_USER;
  if reg.Savekey('Software\test','d:\test.reg') then
  showmessage('true')
  else
  showmessage('false');
  reg.CloseKey;
  reg.Free;
end;为什么Savekey方法执行后的文件里是空的呢?什么都没有,返回结果是false。

解决方案 »

  1.   

    出现问题的原因有2个:
    1. 注册表访问权限不够。
    2. 目标文件 'd:\test.reg' 已经存在。
    function AddPrivilege(AProcID: THandle; const SecuName: PChar): Boolean;
    var
      hToken: Thandle;
      tp: Token_Privileges;
      rl: Cardinal;
    begin
      Result := false;
      if not (OpenProcessToken(AProcID, Token_Adjust_Privileges or Token_Query, hToken)) then exit;
      try
        if not LookupPrivilegeValue(nil, SecuName, tp.Privileges[0].Luid) then exit;
        tp.PrivilegeCount := 1;
        tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        if AdjustTokenPrivileges(hToken, False, tp, Sizeof(TOKEN_PRIVILEGES), Nil, rl) then Result := True;
      finally
        CloseHandle(hToken);
      end;
    end;......var
      RegFile: String;
      reg:Tregistry;
    begin
      AddPrivilege(GetCurrentProcess(), 'SeBackupPrivilege');
      RegFile := 'd:\test.reg';
      if FileExists(RegFile) then DeleteFile(RegFile);
      reg.rootkey:=HKEY_CURRENT_USER; 
      if reg.Savekey('Software\test', RegFile) then 
        showmessage('true') 
      else 
        showmessage('false'); 
      reg.CloseKey; 
      reg.Free; 
    end;