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)
最可能的原因是您已打开请求写入权限的密钥,但在UAC下的Windows 7上,默认情况下,用户不具有写访问权限HKLM.通过传递KEY_READ给TRegistry构造函数或使用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)