Was ist Los mit der Registrierung.GetValue?
Ich versuchen, einen registry-Wert:
var value = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography", "MachineGuid", 0);
In Windows XP alles ok, aber in Windows 7 gibt 0 zurück. In HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography
mit regedit sehe ich MachineGuid
, aber wenn ich
var keys = Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("Cryptography", RegistryKeyPermissionCheck.ReadSubTree).GetValueNames();
keys.Length
ist 0.
Was mache ich falsch? Mit anderen Werten alles ok und bei beiden OS.
- Es zeigt MachineGuid für mich auf Windows 7. Ist dein Benutzer ein admin? Vielleicht ist es ein Berechtigungsproblem.
- Ich bin mir nicht sicher, ob das sein kann, aber benutzt du 64 oder 32 bit Windows 7?
- Ich bin unter Administrator
- Windows 7 64-bit
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sie wahrscheinlich sind, kompilieren Sie die Lösung als x86, wenn Sie kompilieren als x64 Sie können Lesen Sie die Werte ab.
Versuchen, den folgenden code zu kompilieren als x86 und x64:
Lesen Sie mehr über Der Zugriff auf eine Alternative Registrierung Anzeigen.
Finden Sie in hier eine Art des Lesens Werte in x86 und x64.
RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
wie in dem Artikel beschrieben zu öffnen, HKLM und die anschließende OpenSubKey Anrufe funktionieren wie erwartet!Es wohl zu tun hat mit dem UAC (User Account Control). Die zusätzliche Schicht von Schutz für Windows Vista und Windows 7.
Müssen Sie auf Antrag Berechtigungen in der Registrierung.
BEARBEITEN:
Dein code jetzt:
Nur Anfragen die Berechtigungen, die auf der Kryptographie-Unterschlüssel, vielleicht, die das problem verursacht (zumindest hatte ich das mal), also der neue code wäre dann:
EDIT2:
Ich legte den debugger, um die es auf diesen code:
Es stellt sich heraus, können Sie Lesen, dass bestimmten Wert, zumindest ist das meine Vermutung, da alle Daten korrekt, bis ich öffne, key3, da die ValueCount null ist, statt der erwarteten 1.
Ich denke, es ist ein spezieller Wert, der geschützt ist.
Sagen Sie, dass Sie auf 64-bit-Windows: ist Ihre app 32-bit? Wenn ja liegt es wahrscheinlich berührt werden, Registrierung Umleitung und schaut
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography
. Sie kann zu P/Invoke, das zu umgehen: http://msdn.microsoft.com/en-us/library/aa384129.aspx.Wenn Sie kein administrator sind, haben Sie nur Lesezugriff auf HKLM. Sie müssen den Schlüssel öffnen nur-lese-statt. Nicht sicher, wie Sie Sie tun dass mit .NET Registry-Klasse; mit der API direkt verwenden Sie RegOpenKeyEx() mit derKEY_READ
Flagge.EDIT: Nach der Prüfung, MSDN, sehe ich, dass OpenSubKey() nicht öffnen, Lesen Sie nur, und gibt den Inhalt, wenn es gelingt nichts, wenn es fehlschlägt. Da Sie Verkettung mehrerer OpenSubKey Anrufe, es ist höchstwahrscheinlich einer von Ihnen, das ausfällt, dass die anderen scheitern. Versuchen Sie, brechen Sie in separate Anrufe, und die überprüfung der intermediate-Werte zurückgegeben.