Наиболее вероятная причина в том, что вы открыли ключ, запрашивающий доступ на запись, но в Windows 7 под UAC пользователи по умолчанию не имеют доступа на запись к HKLM
. Решите это, передав KEY_READ
конструктору TRegistry
или используя OpenKeyReadOnly
вместо OpenKey
.
Следующее наиболее вероятное объяснение состоит в том, что у вас установлен 64-битный сервер Firebird. Но ваша 32-битная программа читает из 32-битного реестра и поэтому не находит ключи от 64-битного Firebird. См. Перенаправитель реестра , чтобы узнать больше о двух разных реестрах просмотров . См. Доступ к альтернативному представлению реестра для получения подробной информации о том, как прочитать 64-разрядный реестр из 32-разрядного процесса. В переводе на Delphi вам нужно будет включить KEY_WOW64_64KEY
во флаги Access
. Опять же, вы можете передать этот флаг конструктору TRegistry
, что может быть более удобным.
Итак, в итоге, если вы ищете 32-битный сервер, создайте объект реестра следующим образом
reg := TRegistry.Create(KEY_READ);
и если ваш сервер Firebird 64-битный, используйте это
reg := TRegistry.Create(KEY_READ or KEY_WOW64_64KEY);