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

आप KeyExists बजाय ValueExists कॉल करने के लिए की जरूरत है। एक कुंजी रेजीडिट में एक फ़ोल्डर के रूप में दिखाई देती है लेकिन आप नामक मान HKCU\Software\...\Run में देख रहे हैं।

कुछ अन्य टिप्पणियां:

  1. जब से तुम केवल रजिस्ट्री से पढ़ रहे हैं, OpenKeyReadOnly बजाय OpenKey का उपयोग करें।
  2. कुंजी खोला नहीं जा सकता है, तो OpenKeyReadOnly के वापसी मूल्य की जांच करें।
  3. यदि आपको वास्तव में एचकेएलएम (जैसा कि आप किसी टिप्पणी में बताते हैं) के साथ ऐसा करने की आवश्यकता है, तो 64 बिट सिस्टम पर 32 बिट प्रक्रिया चलाते समय रजिस्ट्री रीडायरेक्शन भ्रम के लिए देखें।
+0

इस तेज उत्तर के लिए धन्यवाद। अब यह काम कर रहा है। लेकिन यह काम नहीं किया क्योंकि एक और गलती। मैंने वर्तमान उपयोगकर्ता का उपयोग HKEY_LOCAL_MACHINE को ऑटोस्टार्ट लिखने के लिए अन्य प्रक्रिया में नहीं किया <। < – Hidden

संबंधित मुद्दे