2010-07-24 16 views
9

yapmıyorsa Kayıt defterinde "LocalMachine \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run \" adlı giriş var ve "COMODO Internet Security" adlı güvenlik duvarım var. . Şimdi bilmek istediğim, girişin mevcut olup olmadığını kontrol etmek için kayıt defterini nasıl alabilirim? Eğer yapmazsa, bunu yapmazsa. "Çalıştır" alt anahtarının "COMODO Internet Security" için giriş olup olmadığını nasıl kontrol edeceğimi biliyorum, alt anahtarın var olması için kullandığım kod budur. Eğer bir alt anahtarının altında bir değere arıyorsanızVarsa, kayıt defteri girdisi varsa, bunu yapmazsanız, bu

   using (RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\")) 
       if (Key != null) 
       { 

        MessageBox.Show("found"); 
       } 
       else 
       { 
        MessageBox.Show("not found"); 
       } 

cevap

9

, sen RegistryKey.GetValue(string) kullanabilirsiniz (eğer bir "giriş"? ile ne demek olduğunu). Varsa değeri döndürür ve eğer değilse null. Örneğin

:

using (RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\")) 
    if (Key != null) 
    {  
     string val = Key.GetValue("COMODO Internet Security"); 
     if (val == null) 
     { 
      MessageBox.Show("value not found"); 
     } 
     else 
     { 
      // use the value 
     } 
    } 
    else 
    { 
     MessageBox.Show("key not found"); 
    } 
+0

Tamam ve nasıl getvalue ile localmachine bakmak için alabilirim? – NightsEVil

+0

Örnek ekleme. – jwismar

+0

Hata 'object' türünü örtülü olarak 'string' haline getiremez. Açık bir dönüşüm var (bir dökümün eksik mi?) – NightsEVil

0

aşağıdaki bağlantı bu açıklık olmalıdır:

How to check if a registry key/subkey already exists

Numune kodu:

using Microsoft.Win32; 

RegistryKey rk = Registry.LocalMachine.OpenSubKey("Software\\Geekpedia\\Test"); 

if(rk != null) 
{ 
    // It's there 
} 
else 
{ 
    // It's not there 
} 
+0

ama yerel makine geçerli kullanıcı microsoft windows altında belirli bir başlangıç ​​girişi için bakmak gerekir – NightsEVil

+0

@Leniel: FYI: Örneğin, 'Geekpedia' HLKM \ Software altında Kayıt Defteri'nde değilse, VS2010 atar "Software \\ Geekpedia \\ Test" anahtarını açmaya çalışırken NULL Reference Exception. – jp2code

1

bu deneyin:

using (RegistryKey Key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\COMODO Internet Security")) 
{ 
    if (Key != null) 
    MessageBox.Show("found"); 
    else 
    MessageBox.Show("not found"); 
} 
+0

ama yerel makine geçerli kullanıcı microsoft windows Run altında belirli bir başlangıç ​​girişi aramak gerekiyor – NightsEVil

0

Son zamanlarda, bir kayıt defteri girdisinde alt anahtarları almaya çalıştığım bir soruna rastladım, ancak sorun, kayıt defterinin bu bölümünde her kayıt defteri anahtarının üzerinde yinelendiğim için bazen değerlerin alt anahtarına sahip olmamasıydı. aradı ve alt anahtarın değerini değerlendirmeye çalışırken boş bir başvuru istisnası alırdım.

string subkeyValue = null; 

var subKeyCheck = subkey.GetValue("SubKeyName"); 

if(subKeyCheck != null) 
{ 
    subkeyValue = subkey.GetValue("SubKeyName").ToString(); 
} 

Peki alt anahtar aradığınız değeri bağlı olarak sadece SubKeyName" için takas: diğer bazı cevaplar sağlanan ne Yani, çok benzer

, bu şimdiye ile giderek sona budur "ve bu hile yapmalı.

0

Kodum

 private void button2_Click(object sender, EventArgs e) 

    { 
     string HKCUval = textBox1.Text; 
     RegistryKey HKCU = Registry.CurrentUser; 
     //Checks if HKCUval exist. 
     try { 
      HKCU.DeleteSubKey(HKCUval); //if exist. 
     } 
     catch (Exception) 
     { 
      MessageBox.Show(HKCUval + " Does not exist"); //if does not exist. 
     } 

     } 

yardımcı olur Umut.