无法使用delphi读取win注册表 - firebird密钥

Sam*_*vis 4 delphi registry firebird key

我不明白.我想检查firebird服务器的窗口注册表项是否存在.密钥存在但函数返回false.怎么了?我正在使用Windows 7 64x和delphi 2010.

韩国社交协会.戴维斯.

procedure x;
  var
    reg:TRegistry;
begin

  reg := TRegistry.Create;
  reg.RootKey := HKEY_LOCAL_MACHINE;

  if reg.OpenKey('\SOFTWARE\Firebird Project\Firebird Server\Instances',false)=true then
  begin
    ShowMessage('Key exists');
  end;

end;
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 6

最可能的原因是您已打开请求写入权限的密钥,但在UAC下的Windows 7上,默认情况下,用户不具有写访问权限HKLM.通过传递KEY_READTRegistry构造函数或使用OpenKeyReadOnly而不是使用而来解决这个问题OpenKey.

下一个最可能的解释是您安装了64位Firebird服务器.但是你的32位程序从32位注册表中读取,因此没有从64位Firebird中找到密钥.有关两种不同的注册表视图的详细信息,请参阅注册表重定向器.有关如何从32位进程读取64位注册表的详细信息,请参阅访问备用注册表视图.转换为Delphi,您需要包含在标志中.同样,您可以将此标志传递给构造函数,这可能更方便.KEY_WOW64_64KEYAccessTRegistry

因此,总而言之,如果您正在寻找32位服务器,请像这样创建注册表对象

reg := TRegistry.Create(KEY_READ);
Run Code Online (Sandbox Code Playgroud)

如果你的Firebird服务器是64位,那么使用它

reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);
Run Code Online (Sandbox Code Playgroud)