2010-11-25 5 views
56

Comment vérifier si une valeur de registre existe par code C#? Ceci est mon code, je veux vérifier si 'Start' existe.Comment vérifier si une valeur de registre existe en C#?

public static bool checkMachineType() 
{ 
    RegistryKey winLogonKey = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\services\pcmcia", true); 
    string currentKey= winLogonKey.GetValue("Start").ToString(); 

    if (currentKey == "0") 
     return (false); 
    return (true); 
} 

Répondre

44

Pour la clé de Registre, vous pouvez vérifier si elle est nulle après l'avoir obtenu. Ce sera, s'il n'existe pas. Pour la valeur de registre, vous pouvez obtenir des noms de valeurs pour la clé actuelle et vérifier si ce tableau contient le nom de valeur requis.

+15

Exemple de ce dernier, puisque c'est ce que la question demande? – cja

+2

Je ne peux pas croire que c'est la réponse acceptée o.O – lewis4u

20
string [email protected]"HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\pcmcia"; 
string valueName="Start"; 
if (Registry.GetValue(keyName, valueName, null) == null) 
{ 
    //code if key Not Exist 
} 
else 
{ 
    //code if key Exist 
} 
+11

Que faire si la valeur de la clé est '" n'existe pas "'? Ce qui signifie que 'defaultValue' n'est pas pour la vérification de l'existence de la clé, c'est pour éviter une vérification nulle supplémentaire. – abatishchev

+0

@ben a changé la valeur par défaut de '" not exist "' à null (corrigeant ainsi le code). Donc, le commentaire précédent de @abatishchev ne s'applique plus. –

35
public static bool registryValueExists(string hive_HKLM_or_HKCU, string registryRoot, string valueName) 
{ 
    RegistryKey root; 
    switch (hive_HKLM_or_HKCU.ToUpper()) 
    { 
     case "HKLM": 
      root = Registry.LocalMachine.OpenSubKey(registryRoot, false); 
      break; 
     case "HKCU": 
      root = Registry.CurrentUser.OpenSubKey(registryRoot, false); 
      break; 
     default: 
      throw new System.InvalidOperationException("parameter registryRoot must be either \"HKLM\" or \"HKCU\""); 
    } 

    return root.GetValue(valueName) != null; 
} 
+0

Alors que cette réponse est certainement correcte, cette question a déjà été répondu. – hsanders

+25

@hsanders même si la question a déjà été répondue, il est toujours la bienvenue pour ajouter des informations utiles. Le débordement de pile reçoit beaucoup de trafic de Google;) – DonkeyMaster

+2

root.GetValue (valueName)! = Null déclenche une exception si valueName n'existe pas. – Farukh

3
RegistryKey rkSubKey = Registry.CurrentUser.OpenSubKey(" Your Registry Key Location", false); 
     if (rkSubKey == null) 
     { 
      // It doesn't exist 
     } 
     else 
     { 
      // It exists and do something if you want to 
     } 
+1

cette solution est de vérifier si la clé existe ou non. pour la valeur, nous devons vérifier la liste des valeurs dans cette clé – jammy

-1
 internal static Func<string, string, bool> regKey = delegate (string KeyLocation, string Value) 
     { 
      // get registry key with Microsoft.Win32.Registrys 
      RegistryKey rk = (RegistryKey)Registry.GetValue(KeyLocation, Value, null); // KeyLocation and Value variables from method, null object because no default value is present. Must be casted to RegistryKey because method returns object. 
      if ((rk) == null) // if the RegistryKey is null which means it does not exist 
      { 
       // the key does not exist 
       return false; // return false because it does not exist 
      } 
      // the registry key does exist 
      return true; // return true because it does exist 
     }; 
utilisation

:

 // usage: 
     /* Create Key - while (loading) 
     { 
      RegistryKey k; 
      k = Registry.CurrentUser.CreateSubKey("stuff"); 
      k.SetValue("value", "value"); 
      Thread.Sleep(int.MaxValue); 
     }; // no need to k.close because exiting control */ 


     if (regKey(@"HKEY_CURRENT_USER\stuff ... ", "value")) 
     { 
      // key exists 
      return; 
     } 
     // key does not exist 
0
 RegistryKey test9999 = Registry.CurrentUser; 

     foreach (var item in test9999.GetSubKeyNames()) 
     { 
      if (item.ToString() == "SOFTWARE") 
      { 
       test9999.OpenSubKey(item); 

       foreach (var val in test9999.OpenSubKey(item).GetSubKeyNames()) 
       { 
        if(val.ToString() == "Adobe") { 
         Console.WriteLine(val+ " found it "); 
        } 
       } 
      } 
     } 
Questions connexes