Получите, если запись реестра существует, если это так, сделайте это, если нет - PullRequest
9 голосов
/ 25 июля 2010

Итак, в моем реестре есть запись в папке «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");
                }

Ответы [ 5 ]

9 голосов
/ 25 июля 2010

Если вы ищете значение в подразделе (это то, что вы подразумеваете под «входом»?), Вы можете использовать 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");
    }
1 голос
/ 25 июля 2010

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

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 голосов
/ 21 сентября 2017

Мой код

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

        }

Надеюсь, это поможет.

0 голосов
/ 12 сентября 2015

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

Итак, очень похоже на то, что дали некоторые другие ответы, вот что я закончил:

string subkeyValue = null;

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

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

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

0 голосов
/ 25 июля 2010

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

Как проверить, существует ли раздел / подраздел реестра

Пример кода:

using Microsoft.Win32;

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

if(rk != null)
{
   // It's there
}
else
{
   // It's not there
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...