2013-06-05 12 views
6

Nie wiem, czy mój błąd. Zawsze przeskakuje do gałęzi else, ale klucz istnieje, sprawdziłem to kilka razy.Jak sprawdzić, czy istnieje klucz rejestru

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; 

Odpowiedz

11

Trzeba zadzwonić ValueExists zamiast KeyExists. Klucz pojawia się jako folder w Regedit, ale szukasz klucza o nazwie nginx.exe w kluczu HKCU\Software\...\Run.

Niektóre inne komentarze:

  1. Skoro czytasz tylko z rejestru, należy OpenKeyReadOnly zamiast OpenKey.
  2. Sprawdź wartość zwracaną OpenKeyReadOnly na wypadek, gdyby klucza nie można było otworzyć.
  3. Jeśli rzeczywiście potrzebujesz tego w HKLM (jak podajesz w komentarzu), uważaj na błąd przekierowania rejestru podczas uruchamiania procesu 32-bitowego w systemie 64-bitowym.
+0

Dzięki za szybką odpowiedź. Teraz działa. Ale to nie zadziałało, ponieważ popełniono inny błąd. użyłem bieżącego użytkownika, a nie HKEY_LOCAL_MACHINE, tak jak w innej procedurze pisania autostartu <. < – Hidden

Powiązane problemy