Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何读取注册表HKEY_LOCAL_机器?_Delphi_Delphi 10.3 Rio - Fatal编程技术网

Delphi 如何读取注册表HKEY_LOCAL_机器?

Delphi 如何读取注册表HKEY_LOCAL_机器?,delphi,delphi-10.3-rio,Delphi,Delphi 10.3 Rio,我很难用根键HKEY\u LOCAL\u MACHINE从注册表中读取任何内容 var reg : TRegistry; begin Reg := TRegistry.Create(); Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('\SOFTWARE\Microsoft\Microsoft SQL Server',false) then begin Result := reg.ReadString('Insta

我很难用根键
HKEY\u LOCAL\u MACHINE
从注册表中读取任何内容

var
  reg : TRegistry;
begin
  Reg := TRegistry.Create();
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  if Reg.OpenKey('\SOFTWARE\Microsoft\Microsoft SQL Server',false) then
  begin
    Result := reg.ReadString('InstalledInstances');
    ....
我正在尝试从
InstalledInstances
键获取值:

起初我认为代码不起作用。然后我试着在
HKEY_LOCAL_MACHINE
下读取不同的键,结果相同。有什么我没有得到的许可吗

如果我在
HKEY\U CURRENT\U USER
下使用相同的代码进行阅读,效果很好,我会得到键值。但是在
HKEY\U LOCAL\U机器下
我无法打开任何钥匙

这也不允许我打开:

Reg := TRegistry.Create(KEY_ALL_ACCESS);

HKEY\U LOCAL\U MACHINE
根节点读取值时,需要使用或将属性更改为
KEY\u READ
KEY\u EXECUTE
。否则,您的应用程序对注册表的访问将被UAC(用户帐户控制)阻止,因为由于安全设置的原因,为了修改
HKEY_LOCAL_机器
根节点下的任何键,它需要具有提升的权限

另一种方法是以提升的权限启动应用程序(以管理员身份运行)

当读取或修改
HEY\u CURRENT\u USER
根节点下的注册表时,这不是必需的(尽管这仍然是可取的),因为当前用户已经拥有完全修改自己的注册表项所需的特权


编辑:对于读取或写入REG_MULTI_SZ注册表值,我建议您在从
HKEY_LOCAL_MACHINE
根节点读取值时选中,您需要使用或将属性更改为
KEY_READ
KEY_EXECUTE
。否则,您的应用程序对注册表的访问将被UAC(用户帐户控制)阻止,因为由于安全设置的原因,为了修改
HKEY_LOCAL_机器
根节点下的任何键,它需要具有提升的权限

另一种方法是以提升的权限启动应用程序(以管理员身份运行)

当读取或修改
HEY\u CURRENT\u USER
根节点下的注册表时,这不是必需的(尽管这仍然是可取的),因为当前用户已经拥有完全修改自己的注册表项所需的特权


编辑:对于读取或写入REG_MULTI_SZ注册表值,我建议您检查

注册表重定向器可能有问题,除非您的进程是64位的。可能您也在请求写访问权限。最好使用OpenKeyReadOnly。可能是注册表重定向程序的问题,除非您的进程是64位的。可能您也在请求写访问权限。最好使用OpenKeyReadOnly。如果我没有弄错的话,我已经尝试了KEY_READ,但是我今晚有时间会再次检查您的解决方案并回复-谢谢。好的,KEY_READ和OpenKeyReadOnly都允许我现在打开密钥,这解决了无法打开密钥的问题。但是我没有从reg.ReadString('InstalledInstances')得到任何值。它只是给了我一个空白字符串?我试着在其他地方读另一个键,它给了我一个更进一步的值。这是否与安装的状态具有REG_MULTI_SZ类型而不是REG_SZ类型有关?正如我在评论中所说,注册表重定向可能是一个问题。我假定您的进程是32位的。我已编辑了我的答案,以包含指向另一个SO问题的链接,该问题涉及读取或写入注册表值。我希望它能帮助我接受这个答案,因为我认为你回答了@SilverWarior这个问题,但我仍然无法检索到这个键值。我想我会问一个新的问题来解决这个问题。如果我没弄错的话,我已经试过KEY_READ,但是我会在今晚有时间的时候再次检查你的解决方案,然后回复-谢谢。好的,KEY_READ和OpenKeyReadOnly都允许我现在打开钥匙,这解决了无法打开钥匙的问题。但是我没有从reg.ReadString('InstalledInstances')得到任何值。它只是给了我一个空白字符串?我试着在其他地方读另一个键,它给了我一个更进一步的值。这是否与安装的状态具有REG_MULTI_SZ类型而不是REG_SZ类型有关?正如我在评论中所说,注册表重定向可能是一个问题。我假定您的进程是32位的。我已编辑了我的答案,以包含指向另一个SO问题的链接,该问题涉及读取或写入注册表值。我希望它能帮助我接受这个答案,因为我认为你回答了@SilverWarior这个问题,但我仍然无法检索到这个键值。我想我会问一个新的问题来解决这个问题。