Was ist falsch mit Registry.GetValue?

8

Ich versuche, einen Registrierungswert zu erhalten:

%Vor%

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

starte %Vor%

keys.Length ist 0.

Was mache ich falsch? Mit anderen Werten alles ok in beiden OS.

    
Evl-ntnt 10.03.2011, 16:39
quelle

4 Antworten

23

Das Problem ist, dass Sie wahrscheinlich die Lösung als x86 kompilieren, wenn Sie als x64 kompilieren, können Sie die Werte lesen.

Versuchen Sie den folgenden Code, der als x86 und x64 kompiliert:

%Vor%

Sie können mehr über Zugriff auf eine alternative Registrierungsansicht lesen.

Sie finden in hier eine Möglichkeit zum Lesen von Werten in x86 und x64.

    
pedrocgsousa 20.10.2011, 10:45
quelle
7

Es hat wahrscheinlich mit UAC (User Account Control) zu tun. Die zusätzliche Schutzebene für Windows Vista und Windows 7.

Sie müssen Berechtigungen für die Registrierung anfordern.

BEARBEITEN : Dein Code jetzt:

%Vor%

Fordert nur die Berechtigungen für den Unterschlüssel Kryptografie an, vielleicht verursacht das das Problem (zumindest hatte ich das einmal), also wäre der neue Code dann:

%Vor%

EDIT2:
Ich habe den Debugger an diesen Code angehängt:

%Vor%

Es stellt sich heraus, dass Sie diesen spezifischen Wert lesen können, zumindest ist das meine Vermutung, weil alle Daten korrekt sind, bis ich key3 öffne, da der ValueCount Null ist, anstatt der erwarteten 1.

Ich denke, es ist ein besonderer Wert, der geschützt ist.

    
Aidiakapi 10.03.2011 16:44
quelle
6

Sie sagen, Sie sind auf 64-Bit-Windows: Ist Ihre App 32-Bit? Wenn dies der Fall ist, wird es wahrscheinlich von Registrierungsumleitung betroffen sein und schaut sich HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography an. Sie müssen möglicherweise P / Invoke, um es zu umgehen: Ссылка .

    
Mark Sowul 10.03.2011 17:03
quelle
3

Wenn Sie kein Administrator sind, haben Sie nur Leseberechtigung für HKLM. Sie müssen stattdessen den Schlüssel schreibgeschützt öffnen. Ich bin mir nicht sicher, wie man das mit der .NET-Registry-Klasse macht; Mit der API direkt verwenden Sie RegOpenKeyEx () mit dem KEY_READ flag.

BEARBEITEN: Nachdem ich MSDN überprüft habe, sehe ich, dass OpenSubKey () schreibgeschützt geöffnet wird, und gibt den Inhalt zurück, wenn es erfolgreich ist und nichts, wenn es fehlschlägt. Da Sie mehrere OpenSubKey-Aufrufe verketten, ist es wahrscheinlich, dass eine der fehlgeschlagenen Verbindungen die anderen fehlschlägt. Versuchen Sie, sie in separate Aufrufe aufzuteilen und die zurückgegebenen Zwischenwerte zu überprüfen.

    
Ken White 10.03.2011 16:48
quelle

Tags und Links