2013-06-05 46 views
6

我不知道我的错误。它总是跳转到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; 

回答

11

你需要调用ValueExists而非KeyExists。一个键是在Regedit中显示为文件夹的内容,但是您在密钥HKCU\Software\...\Run中查找名为nginx.exe的值。

一些其他意见:

  1. 由于您只从注册表中读取,使用OpenKeyReadOnly而非OpenKey
  2. 检查返回值OpenKeyReadOnly万一钥匙不能打开。
  3. 如果实际上需要使用HKLM来做到这一点(如您在注释中所述),请注意在64位系统上运行32位进程时注册表重定向的混淆。
+0

感谢您的快速回答。现在它的工作。但它没有工作,因为另一个错误。我使用当前用户而不是像另一个程序中的HKEY_LOCAL_MACHINE来写自动启动<。< – Hidden