2016-07-01 7 views
1

Ok Leute, ich habe ein wirklich seltsames Problem, wo ich gerade Regedit anschaue und ich sehe, dass der Reg-Schlüssel, nach dem ich suche, existiert.Problem beim Vergleichen von Registrierungsschlüssel-Werten mit String-Methoden

Dies ist der Code, den ich benutze es

public static void GetSoeRegKey() 
{ 
    RegistryKey soeKey = Registry.CurentUser.OpenSubKey("TechTools", true); 

    if (soeKey != null) 
    { 
     foreach (string value in soeKey.GetValueNames()) 
     { 
      //Here's where the problem lies 
      if (value.Equals("SOEEncPass")) 
       System.Diagnostics.Debug.WriteLine(value); 
     } 
    } 
} 

So zu erkennen, ich habe durch den Code trat, und jedes Mal, es ist die Ausrichtungs-Schlüssel zu finden und die soeKey.GetValueNames() Methode die Werte korrekt wiederkehr .

Obwohl ich klar sehen kann, dass der Wert, den ich suche, zurückgegeben wird, wird die if (value.Equals("SOEEncPass")) nie als wahr ausgewertet.

Ich habe es versucht, so value == "SOEEncPass" und string.Compare(value, "SOEEncPass") mit all den StringComparision Optionen, aber egal, was ich die Linie tun System.Diagnostics.Debug.WriteLine(value); wird nie ausgeführt.

Fehle ich etwas mit dem Zeichenfolgenvergleich, oder gibt es eine Eigenart, um Schlüssel zu regulieren, die mir nicht bekannt sind?

Antwort

0

Kann noch nicht kommentieren, also hier geht es: Ihr Code arbeitete für mich (was bedeutet, dass der Vergleich wahr zurückgegeben) mit beiden Equals und '==', obwohl ich natürlich meine eigenen Schlüssel verwendet. Hier ist mein Code und ein Bild des gesuchten Schlüssels.

class Program 
    { 
     static void Main(string[] args) 
     { 
      RegistryKey soeKey = Registry.CurrentUser.OpenSubKey("Console"); 

      if (soeKey != null) 
      { 
       foreach (string value in soeKey.GetValueNames()) 
       { 
        //Here's where the problem lies 
        if (value.Equals("FontWeight")) 
         Console.WriteLine(value); 
         //System.Diagnostics.Debug.WriteLine(value); 
       } 
      } 
      Console.ReadKey(); 
     } 
    } 

I looked for FontWeight and it worked

hoffe, das hilft ein wenig ... das Problem ist nicht in der Vergleichsteil. Sind Sie sicher, dass Sie mit dem richtigen Namen/Wert vergleichen?

EDIT: Ich versuchte es mit beiden REG_SZ und REG_DWORD Typen und beide funktionierten. Strange in der Tat

+0

Dank Tamás, ja ich den einen der Werte sehen kann 'GetValueNames' als' „SOEEncePass“ 'zurückgegeben wird. Für Info wird der Wert als REG_SZ-Typ erstellt, obwohl ich bezweifle, dass das einen Unterschied macht. –

+0

Nur was ich anders gemacht habe, war, dass ich den Unterschlüssel nicht zum Schreiben geöffnet habe. Aber ich nehme an, dass Sie das tun müssen (und es wäre albern, wenn das das Grundproblem wäre). –

+0

Könnte es wegen der Verschlüsselung sein? –

0

Können Sie den Schlüssel und seine Werte in eine REG-Datei exportieren und hier für die Analyse veröffentlichen? Möglicherweise gibt es zusätzliche Zeichen (d. H. Leerzeichen) im Wertnamen. Sie können auch einen Groß- und Kleinschreibung Vergleich versuchen:

string.Compare(value, "SOEEncPass", StringComparison.OrdinalIgnoreCase); 
+0

Sorry Udo, der Wert in Frage enthält ein verschlüsseltes Passwort, so kann ich es nicht teilen. –