2015-05-17 16 views
8

Khi tôi thử đọc giá trị từ khóa này, giá trị thích hợp của khóa này không được trả về, mà thay vào đó tôi nhận được giá trị của đường dẫn khóa khác?Đường dẫn khóa chính _winreg không chính xác

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

Và kết quả:

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

Nhưng giá trị này không phải là một phần của chính tôi sử dụng? Giá trị này không nằm ở khóa này tôi nên có một giá trị khác nhau. Tôi tìm kiếm về nơi giá trị nằm trong những giá trị không chính xác trên RegEdit và nằm tại

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

Khi tôi sử dụng command prompt

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

Và tôi nhận được đầu ra thích hợp ...

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" 

Sau đó, tôi sẽ thử sử dụng os.popen trên python ...

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

Và đầu ra

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

Tại sao có những khác nhau? Làm cách nào tôi có thể nhận được giá trị chính xác bằng cách sử dụng _winreg?

+1

Có thể có liên quan đến [Dạng xem đăng ký thay thế] (https://msdn.microsoft.com/en-us/library/aa384129%28v=VS.85%29.aspx) vì bạn chạy Python 32 bit trên phiên bản 64 bit của hệ điều hành. Điều này được đề cập trong '_winreg' [documentation] (https://docs.python.org/2/library/_winreg.html#bit-specific). – martineau

+0

Bạn đã đặt giá trị như thế nào? – vks

+0

@vks Các giá trị khóa này được cài đặt tự động, tôi chỉ muốn truy xuất chúng. – user3818650

Trả lời

2

Trên WOW64, ứng dụng 32 bit xem cây đăng ký tách biệt với cây đăng ký mà xem ứng dụng 64 bit. Registry phản ánh các khóa và giá trị registry cụ thể giữa hai khung nhìn.

Bạn nên tắt đăng ký reflection.

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

Tôi đã thử sử dụng' .DisableReflectionKey() 'với đối số của' khóa' của tôi và nó không hoạt động. Tôi cũng đã thử nó với đối số ''.HKEY_LOCAL_MACHINE' và nó cũng không hoạt động, cả hai đều trả về' (' SunJavaUpdateSched ', ..., 1) 'là giá trị 32 bit mà tôi giả định. – user3818650

+0

_winreg.QueryReflectionKey (...) trả về gì sau khi thử với cả hai đối số đó? – Eric

+0

@Eric Cả hai đều đúng. – user3818650

Các vấn đề liên quan