2015-05-17 10 views
8

Wenn ich versuche, einen Wert von diesem Schlüssel zu lesen, wird der richtige Wert dieses Schlüssels nicht zurückgegeben, aber stattdessen erhalte ich einen anderen Schlüsselpfadwert?Python _winreg Schlüsselpfad falsch

import _winreg as wreg 
key = wreg.OpenKey(wreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run") 
print(wreg.EnumValue(key, 0)) 

Und die Ausgabe:

('SunJavaUpdateSched', u'"C:\\Program Files (x86)\\Common Files\\Java\\Java Update\\jusched.exe"', 1) 

Aber dieser Wert ist nicht Teil des Schlüssels I verwendet? Dieser Wert befindet sich nicht an diesem Schlüssel. Ich hätte einen anderen Wert erhalten sollen. Ich suchte, wo der Wert des falschen Wert auf RegEdit befindet und seine bei

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run 

befindet Wenn ich Befehl prompt

REG QUERY HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 

Und ich bekomme die richtige Ausgabe ...

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 
IgfxTray REG_SZ "C:\Windows\system32\igfxtray.exe" 
HotKeysCmds REG_SZ "C:\Windows\system32\hkcmd.exe" 
Persistence REG_SZ "C:\Windows\system32\igfxpers.exe" 

Dann mit os.popen auf python ich würde versuchen, ...

import os 
buff = os.popen("REG QUERY HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run") 
print(buff.read()) 

Und die Ausgabe

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 
SunJavaUpdateSched REG_SZ "C:\Program Files (x86)\Common Files\Java\Java Update\jusched.exe" 

Warum sind diese anders? Wie kann ich mit _winreg den richtigen Wert erhalten?

+1

hat wahrscheinlich etwas mit dem zu tun [Alternate Registry Ansichten] (https://msdn.microsoft.com/en-us/library/aa384129%28v=VS.85%29.aspx), weil du bist Ausführen von 32-Bit-Python auf einer 64-Bit-Version des Betriebssystems. Dies wird in der "_winreg" [Dokumentation] (https://docs.python.org/2/library/_winreg.html#bit-specific) erwähnt. – martineau

+0

Wie haben Sie den Wert festgelegt? – vks

+0

@vks Diese Schlüsselwerte werden automatisch installiert, ich möchte sie nur abrufen. – user3818650

Antwort

2

Auf WOW64 zeigen 32-Bit-Anwendungen eine Registrierungsstruktur an, die von der Registrierungsstruktur getrennt ist, die von 64-Bit-Anwendungen angezeigt wird. Bei der Registrierungsreflexion werden bestimmte Registrierungsschlüssel und -werte zwischen den beiden Ansichten kopiert.

Sie sollten die Registrierung reflection deaktivieren.

_winreg.DisableReflectionKey() 
# Do stuff ... 
# ... 
# ... 
_winreg.EnableReflectionKey() 
+0

Ich versuchte mit' .DisableReflectionKey() 'mit dem Argument meiner' Schlüssel' und es hat nicht funktioniert. Ich habe es auch mit dem Argument ''HKEY_LOCAL_MACHINE' versucht und es hat auch nicht funktioniert, beide haben das' ('SunJavaUpdateSched', ..., 1) 'zurückgegeben, was der 32-Bit-Wert ist, den ich annahm. – user3818650

+0

Was gibt _winreg.QueryReflectionKey (...) nach dem Versuch mit diesen beiden Argumenten zurück? – Eric

+0

@Eric Beide True. – user3818650

Verwandte Themen