首页 > 解决方案 > Delphi 导出 HKEY_CURRENT_USER 密钥不起作用 - 空结果文件

问题描述

我正在尝试使用 TRegistry.SaveKey 或 RegSaveKey 函数导出注册表项,但没有成功。我得到的只是一个 0 字节的空文件。我在网上看到了一些例子,似乎没有一个适用于 Windows10。

  reg := TRegistry.Create;

  reg.RootKey := HKEY_CURRENT_USER;
  reg.Access := KEY_ALL_ACCESS;

  if reg.OpenKey('\Software\MyCompanyName\MyApplication\', True) then
  begin
    reg.WriteInteger('background', Self.Color);

    reg.SaveKey('HKEY_CURRENT_USER\Software\MyCompanyName\MyApplication', 'test.txt'); //not working
    RegSaveKey(reg.CurrentKey, 'test.reg', nil); //creates empty file
  end;
  reg.CloseKey;
  reg.Free;

此外,如果我从 RegEdit 中提取现有密钥,然后尝试使用 TRegistry.LoadKey 或 RegLoadKey 将其加载到应用程序中,则不会发生任何事情

我在运行它的机器上确实拥有管理员权限。

有熟悉这个问题的人吗?

标签: delphiregistryregistrykey

解决方案


从以下文档RegSaveKey

调用进程必须启用 SE_BACKUP_NAME 权限。

我的猜测是RegSaveKey返回的值不是ERROR_SUCCESS. 您的代码未检查。

也可以看看:

RegSaveKey 返回 ERROR_PRIVILEGE_NOT_HELD

要检查的另一件事是在您尝试保存之前目标文件不存在,否则该功能将失败(文档中也提到了这一点),并且显然您对文件位置具有写入权限。


推荐阅读