2010-11-25 22 views
56

Wie überprüft man, ob ein Registrierungswert durch C# -Code existiert? Dies ist mein Code, ich möchte überprüfen, ob 'Start' existiert.Wie überprüft man, ob ein Registrierungswert mit C# existiert?

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); 
} 

Antwort

44

Für Registrierungsschlüssel können Sie überprüfen, ob es null ist, nachdem Sie es erhalten haben. Es wird sein, wenn es nicht existiert.

Für Registrierungswert können Sie Namen von Werten für den aktuellen Schlüssel abrufen und überprüfen, ob dieses Array den erforderlichen Wertnamen enthält.

+15

Beispiel für letzteres, denn das ist es, was die Frage zu stellen? – cja

+2

Ich kann nicht glauben, dass dies die akzeptierte Antwort ist 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

Was ist, wenn der Wert des Schlüssels '" nicht existiert "'? Das bedeutet, dass 'defaultValue' nicht für die Überprüfung der Schlüsselexistenz dient, sondern zur Vermeidung einer zusätzlichen Nullprüfung. – abatishchev

+0

@ben änderte den Standardwert von "nicht vorhanden" auf "null" (wodurch der Code behoben wurde). Daher gilt der vorherige Kommentar von @abatishchev nicht mehr. –

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

Während diese Antwort definitiv richtig ist, wurde diese Frage bereits beantwortet. – hsanders

+25

@hsanders auch wenn die Frage bereits beantwortet wurde, ist es immer willkommen, nützliche Informationen hinzuzufügen. Stack Overflow empfängt viel Traffic von Google;) – DonkeyMaster

+2

root.GetValue (WertName)! = Null löst Ausnahme aus, wenn WertName nicht existiert. – 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

Diese Lösung soll überprüfen, ob der Schlüssel existiert oder nicht. Für den Wert müssen wir nach der Liste der Werte in diesem Schlüssel suchen – 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 
     }; 

Nutzung:

 // 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 "); 
        } 
       } 
      } 
     } 
Verwandte Themen