2013-06-05 70 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