2013-06-05 42 views
6

Ich weiß nicht, wo mein Fehler ist. Es springt immer auf den Zweig else, aber der Schlüssel existiert, ich habe es mehrmals überprüft.Wie überprüft man, ob ein Registrierungsschlüssel existiert

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; 

Antwort

11

Sie müssen ValueExists nennen, statt KeyExists. Ein Schlüssel ist, was als ein Ordner in Regedit angezeigt wird, aber Sie suchen nach einem Wert mit Name nginx.exe in dem Schlüssel HKCU\Software\...\Run.

Einige andere Kommentare:

  1. Da Sie nur aus der Registrierung zu lesen, verwenden Sie OpenKeyReadOnly statt OpenKey.
  2. Überprüfen Sie den Rückgabewert von OpenKeyReadOnly für den Fall, dass der Schlüssel nicht geöffnet werden kann.
  3. Wenn Sie dies tatsächlich mit HKLM tun müssen (wie Sie in einem Kommentar angeben), achten Sie bei der Ausführung des 32-Bit-Prozesses auf dem 64-Bit-System auf Verwirrung bei der Registrierungsumleitung.
+0

Danke für diese schnelle Antwort. Jetzt geht es. Aber es hat nicht funktioniert, weil ein anderer Fehler. Ich benutzte den aktuellen Benutzer nicht HKEY_LOCAL_MACHINE wie in der anderen Prozedur zum Schreiben des Autostarts <. < – Hidden

Verwandte Themen