Ответ 1
вы должны использовать значение KEY_WOW64_64KEY
, когда открываете реестр с классом TRegistry
.
из MSDN:
KEY_WOW64_64KEY Указывает, что приложение на 64-битной Windows должно работать с 64-битным представлением реестра. Этот флаг игнорируется 32-битным Окна.
Этот флаг должен быть скомбинирован с использованием ИЛИ с другими флагами в эта таблица, которая запрашивает или получает доступ значения реестра.
попробуйте это примерное приложение.
{$APPTYPE CONSOLE}
uses
Windows,
Classes,
registry,
SysUtils;
procedure ReadRegistry;
var
Registry: TRegistry;
List : TStrings;
begin
Registry := TRegistry.Create(KEY_WRITE OR KEY_WOW64_64KEY);
//Registry := TRegistry.Create(KEY_READ OR KEY_WOW64_64KEY);
List := TStringList.Create;
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
if Registry.OpenKeyReadOnly('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run') then
begin
Registry.GetValueNames(List);
Writeln(List.Text);
end;
Registry.CloseKey;
finally
Registry.Free;
List.Free;
end;
end;
begin
try
ReadRegistry();
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
Readln;
end.