Как мне прочитать из реестра HKEY_LOCAL_MACHINE? - PullRequest
0 голосов
/ 05 января 2020

Мне трудно получить какие-либо чтения из реестра с ключом root HKEY_LOCAL_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:

image

Сначала я подумал код не работает Затем я попытался прочитать разные ключи под HKEY_LOCAL_MACHINE с теми же результатами. Есть ли какие-то разрешения, которые я не получаю?

Если я использую тот же код для чтения в HKEY_CURRENT_USER, это работает нормально, и я получаю значения ключей. Но под HKEY_LOCAL_MACHINE я не могу открыть ни один ключ.

Это также не позволяет мне открывать:

Reg := TRegistry.Create(KEY_ALL_ACCESS);

1 Ответ

2 голосов
/ 06 января 2020

При чтении значений из узла HKEY_LOCAL_MACHINE root необходимо использовать TRegistry.OpenKeyReadOnly() или изменить свойство TRegistry.Access на KEY_READ или KEY_EXECUTE. В противном случае доступ к реестру через ваше приложение будет заблокирован UA C (контроль учетных записей пользователей), поскольку для изменения любого ключа в узле HKEY_LOCAL_MACHINE root из-за настроек безопасности необходимо иметь повышенные привилегии. .

Другим способом является запуск приложения с повышенными привилегиями (запуск от имени администратора).

Это не требуется (хотя все еще желательно) при чтении или изменении реестра в * 1015. * root узла, поскольку текущий пользователь уже имеет необходимые привилегии для полного изменения своих собственных ключей реестра.

РЕДАКТИРОВАТЬ: Что касается чтения или записи значений реестра REG_MULTI_SZ, я рекомендую вам проверить Чтение и Записать запись реестра типа REG_MULTI_SZ, используя Delphi

...