2010-07-24 11 views
9

Entonces en mi registro tengo la entrada bajo "LocalMachine \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run \" llamada "COMODO Internet Security" que es mi firewall . Ahora lo que me gustaría saber es cómo puedo hacer que el registro compruebe si existe esa entrada. Si lo hace, si no, haz eso. Sé cómo comprobar si existe la subclave "Ejecutar" pero no la entrada para "COMODO Internet Security", este es el código que estaba usando para obtener si existe la subclave.Obtener si la entrada del Registro existe si es así, si no, haga eso

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

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

Respuesta

9

Si usted está buscando un valor por debajo de una subclave, (es que lo que entendemos por "entrada"?) Que puede utilizar RegistryKey.GetValue(string). Esto devolverá el valor si existe, y null si no lo hace.

Por ejemplo:

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

¿está bien y cómo puedo verlo en la máquina local con getvalue? – NightsEVil

+0

Agregar ejemplo. – jwismar

+0

Error No se puede convertir implícitamente el tipo 'objeto' en 'cadena'. Existe una conversión explícita (¿falta un molde?) – NightsEVil

0

El siguiente enlace debería clarificar esto: Código

How to check if a registry key/subkey already exists

muestra:

using Microsoft.Win32; 

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

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

pero necesito buscar una entrada de inicio específica bajo el usuario actual de la máquina local microsoft windows Ejecutar – NightsEVil

+0

@Leniel: FYI: si, por ejemplo, 'Geekpedia' no está en el Registro en HLKM \ Software, VS2010 arroja un Excepción de referencia nula al intentar abrir la clave '" Software \\ Geekpedia \\ Test "'. – jp2code

1

Prueba esto:

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

pero necesito buscar una entrada de inicio específica bajo el usuario actual de la máquina local Microsoft Windows Run – NightsEVil

0

Me encontré con un problema recientemente cuando intentaba capturar subclaves en una entrada de registro, pero el problema era que, como estaba iterando sobre cada clave de registro en esa sección del registro, a veces los valores no tenían la subclave I estaba buscando, y obtendría una excepción de referencia nula al tratar de evaluar el valor de la subclave.

Por lo tanto, muy similar a lo que algunas otras respuestas proporcionadas, este es lo que terminé yendo con:

string subkeyValue = null; 

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

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

Así que dependiendo de cuál es el valor que está buscando subclave, sólo cambio hacia fuera para "SubKeyName "y esto debería hacer el truco".

0

Mi código

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

     } 

espero que ayude.

Cuestiones relacionadas