2010-07-24 1 views
9

Так что в моем реестре у меня есть запись в разделе «LocalMachine \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run \» под названием «COMODO Internet Security», который является моим брандмауэром , Теперь я хотел бы знать, как я могу получить реестр, чтобы проверить, существует ли эта запись? Если это произойдет, если нет, тогда сделайте это. Я знаю, как проверить, существует ли подраздел «Запуск», но не запись для «COMODO Internet Security», это код, который я использовал для получения, если этот подраздел существует.Получить, если запись реестра существует, если это так, если это не так,

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

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

ответ

9

Если вы ищете значение под подразделом (это то, что вы имеете в виду под «входом»?), Вы можете использовать RegistryKey.GetValue(string). Это вернет значение, если оно существует, и null, если это не так.

Например:

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

ОК и как я могу заставить его посмотреть в localmachine с getvalue? – NightsEVil

+0

Пример добавления. – jwismar

+0

Ошибка Невозможно неявно преобразовать тип 'object' в 'string'. Явное преобразование существует (вы пропускаете листинг?) – NightsEVil

0

Следующая ссылка должна разъяснить это:

How to check if a registry key/subkey already exists

Пример кода:

using Microsoft.Win32; 

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

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

, но мне нужно найти конкретную запись запуска под локальными компьютерами. Окна Microsoft Windows. Запустите – NightsEVil

+0

@Leniel: FYI: Если, например, 'Geekpedia' не находится в реестре под HLKM \ Software, VS2010 выбрасывает Исключение Null Reference при попытке открыть ключ «Программное обеспечение \\ Geekpedia \\ Test» '. – jp2code

1

Попробуйте это:

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

, но мне нужно найти конкретную запись запуска под локальным компьютером. Текущие окна Microsoft Windows Run – NightsEVil

0

Недавно я столкнулся с проблемой, когда я пытался захватить дочерние элементы в записи реестра, но проблема заключалась в том, что, поскольку я выполнял итерацию по каждому разделу реестра в этом разделе реестра, иногда значения не имели бы подраздела I искал, и я хотел бы получить нулевое эталонное исключение при попытке оценить значение подключа в.

Таким образом, очень похоже на то, что при условии, некоторые другие ответы, это то, что я в конечном итоге происходит с:

string subkeyValue = null; 

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

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

Поэтому в зависимости от того, что подключ значение, которое вы ищете, просто поменять его на «SubKeyName «и это должно сделать трюк.

0

Моего кода

 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. 
     } 

     } 

Надеется, что это помогает.