2012-02-19 74 views
10

我試圖訪問Windows註冊表(在Python中)使用_winreg查詢鍵值,我無法讓它工作。下面的代碼行返回WindowsError說,「系統找不到指定文件」:Python _winreg woes

key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, _winreg.KEY_ALL_ACCESS) 

後試圖小時,它看起來像Python不能看到,超出了路徑的「瑪雅」的一部分(它看起來像「2012 \ ...等...」子路徑是「不可見」或不存在的)。現在我已經打開了註冊表編輯器,我保證HKLM有這樣一條路。我在Windows 7 64位上。任何想法我做錯了什麼?這讓我瘋狂。謝謝...

+0

你設法解決這個問題? – 2013-11-19 11:56:29

+0

我這麼認爲。老實說,我不記得我是怎麼做的。也許我以某種方式繞過了這個問題。對不起,我不能再有任何幫助... – user1219144 2013-11-20 12:46:44

回答

6

你還使用的是64位版本的Python,還是32位的Python? (後者更常見。)如果您使用的是32位版本的Python,_winreg模塊默認會看到32位註冊表,而註冊表會顯示您的64位註冊表。您應該能夠告訴_winreg打開不同的視圖;請參閱有關訪問權限的_winreg模塊文檔,特別是subsection on 64-bit specific flagsthe MSDN article it references。不幸的是,它看起來並不像32位程序訪問64位註冊表的方式,但我可能會錯過一些東西。

+0

謝謝你的回覆。當我檢查我有哪個Python版本(使用sys.version_info)時,它說(2,6,4,'final',0)。雖然我看不到任何64位或32位信息。另一件事是我不知道在哪裏使用「KEY_WOW64_64KEY」部分。我知道,我聽起來很可悲,但我確實需要幫助...... – user1219144 2012-02-20 00:56:53

+0

在sys.version_info中你看不到32-versus-64-bit,但你可以在sys.version中看到它(它會在那裏說'32位'或'64位')。你也可以看看'platform.architecture()'。至於打開註冊表的方式不同,正如我所說的,我不相信您可以從32位進程訪問64位註冊表,這是您可以從64位進程訪問的方式。然而,我可能是錯的。我從來沒有做過很多32位註冊表訪問。 – 2012-02-20 10:12:51

+0

@ThomasWouters:我也無法在_Windows 7 64-bit_&_python 2.7.3上使用'_winreg'讀取密鑰(默認,2012年4月10日,23:24:47)[MSC v.1500 64位(AMD64) ] _。我得到的錯誤與@ user1219144 _system找不到指定的file_相同。爲了測試這個,我使用這個[WindowsRegistry類](http://is.gd/8DV8KL)和測試用例。我看到的行爲:** 1st **運行正常; ** 2nd **運行正常; **重新啓動後**錯誤。調試:嘗試運行_IDLE_作爲管理員,將'START C:\ Python27 \ pythonw.exe C:\ Python27 \ Lib \ idlelib \ idle.py'放入一個**。bat **文件中,右鍵單擊它然後選擇_Run作爲administrator_ – TrinitronX 2012-05-16 04:54:03

9

您需要將訪問密鑰與其中一個64位訪問密鑰相結合。

_winreg.KEY_WOW64_64KEY 指示64位Windows上的應用程序應該在64位註冊表視圖上運行。

_winreg.KEY_WOW64_32KEY 指示64位Windows上的應用程序應該在32位註冊表視圖上運行。

嘗試:

_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Autodesk\Maya\2012\Setup\InstallPath', 0, (_winreg.KEY_WOW64_64KEY + _winreg.KEY_ALL_ACCESS)) 
+0

謝謝!作品完美。 – virtualsets 2014-04-11 10:31:29

+0

我有一個問題,我的子鍵不枚舉。像你說的那樣添加KEY_WOW64_64KEY解決了我的問題。謝謝。 – FernandoZ 2015-09-30 22:45:17