delphi - 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 将其加载到应用程序中,则不会发生任何事情
我在运行它的机器上确实拥有管理员权限。
有熟悉这个问题的人吗?
解决方案
从以下文档RegSaveKey
:
调用进程必须启用 SE_BACKUP_NAME 权限。
我的猜测是RegSaveKey
返回的值不是ERROR_SUCCESS
. 您的代码未检查。
也可以看看:
RegSaveKey 返回 ERROR_PRIVILEGE_NOT_HELD
要检查的另一件事是在您尝试保存之前目标文件不存在,否则该功能将失败(文档中也提到了这一点),并且显然您对文件位置具有写入权限。
推荐阅读
- oracle - SQLLDR导入文件期间如何从另一个表中选择
- php - 我想获取数组 1 中不存在但存在于数组 2 中的元素
- core-data - NSFetchedResultsController + UICollectionViewDiffableDataSource + CoreData - 如何区分整个对象?
- python - 如何使 QDockWidgets 成为单独的窗口?
- r - 如何创建具有打开和关闭行作为列的数据框
- git - 在“git stash save --all”之后运行“git stash apply”,不会恢复跟踪的文件,只会恢复未跟踪的文件
- arrays - 在kibana中搜索数据的问题
- vue.js - 如何在 asyncData 中做 mapGetters?纽斯特
- python - 如何在python的列中过滤所有包含''isolated'' nan值的行
- javascript - 如何从 HTML 节点访问项目 [Vue.js]