如何检查是否存在注册表项

Hid*_*den 6 delphi registry

我不知道我的错误.它总是跳到else分支,但密钥存在,我检查了几次.

var
  reg : TRegistry;
begin
    with TRegistry.Create do try
      RootKey:=HKEY_CURRENT_USER;
      OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', False);
    if KeyExists('nginx.exe') then begin
      ShowMessage('Ja geht ist da');
      Result := True;
      btnAutostart.ImageIndex := 5
    end
    else begin
      Result := False;
      btnAutostart.ImageIndex := 0;
    end;
    finally
      Free;
    end;
end;
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 11

你需要打电话ValueExists而不是打电话KeyExists.密钥是在Regedit中显示为文件夹但您正在查找nginx.exe密钥中指定的值HKCU\Software\...\Run.

其他一些评论:

  1. 由于您只是从注册表中读取,因此请使用OpenKeyReadOnly而不是OpenKey.
  2. 检查返回值,OpenKeyReadOnly以防无法打开钥匙.
  3. 如果您确实需要使用HKLM执行此操作(正如您在注释中所述),请注意在64位系统上运行32位进程时注册表重定向混淆.