Wie kann ich anhand des C # -Codes überprüfen, ob ein Registrierungswert vorhanden ist? Dies ist mein Code. Ich möchte überprüfen, ob 'Start' vorhanden ist.
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);
}
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; }
quelle
string keyName=@"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 }
quelle
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 }
quelle
public bool ValueExists(RegistryKey Key, string Value) { try { return Key.GetValue(Value) != null; } catch { return false; } }
Diese einfache Funktion gibt nur dann true zurück, wenn ein Wert gefunden wird, der jedoch nicht null ist. Andernfalls wird false zurückgegeben, wenn der Wert vorhanden ist, er jedoch null ist oder der Wert nicht im Schlüssel vorhanden ist.
NUTZUNG für Ihre Frage:
if (ValueExists(winLogonKey, "Start") { // The values exists } else { // The values does not exists }
quelle
Natürlich ist "Fagner Antunes Dornelles" in seiner Antwort richtig. Aber es scheint mir, dass es sich lohnt, zusätzlich den Registrierungszweig selbst zu überprüfen oder sich des Teils zu vergewissern, der genau dort ist.
Zum Beispiel ("Dirty Hack") muss ich Vertrauen in die RMS-Infrastruktur herstellen. Andernfalls werde ich beim Öffnen von Word- oder Excel-Dokumenten zur Eingabe von "Active Directory Rights Management Services" aufgefordert. So kann ich meinen Servern in der Unternehmensinfrastruktur Remote-Vertrauen hinzufügen.
foreach (var strServer in listServer) { try { RegistryKey regCurrentUser = Registry.CurrentUser.OpenSubKey($"Software\\Classes\\Local Settings\\Software\\Microsoft\\MSIPC\\{strServer}", false); if (regCurrentUser == null) throw new ApplicationException("Not found registry SubKey ..."); if (regCurrentUser.GetValueNames().Contains("UserConsent") == false) throw new ApplicationException("Not found value in SubKey ..."); } catch (ApplicationException appEx) { Console.WriteLine(appEx); try { RegistryKey regCurrentUser = Registry.CurrentUser.OpenSubKey($"Software\\Classes\\Local Settings\\Software\\Microsoft\\MSIPC", true); RegistryKey newKey = regCurrentUser.CreateSubKey(strServer, true); newKey.SetValue("UserConsent", 1, RegistryValueKind.DWord); } catch(Exception ex) { Console.WriteLine($"{ex} Pipec kakoito ..."); } } }
quelle
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 };
Verwendung:
// 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
quelle
GetValue
wird niemals vom TypRegistryKey
sein. Warum wirfst du ihn also?