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

时间:2013-06-05 11:06:55

标签: 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;

1 个答案:

答案 0 :(得分:11)

您需要致电ValueExists而不是KeyExists。密钥在Regedit中显示为文件夹,但您在密钥nginx.exe中查找名为HKCU\Software\...\Run的值。

其他一些评论:

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