2012-02-19 9 views
10

_winreg kullanarak bir anahtar değeri sorgulamak için Windows kayıt defterine (Python'da) erişmeye çalışıyorum ve işe yaramayacağım. Aşağıdaki çizgi WindowsError "Sistem belirtilen dosyayı bulamıyor" diyerek döndürür: Python yolunun "Maya" kısmına önünü göremiyordu gibi görünüyor, çalışmakla saat sonraPython _winreg woes

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

(benzediğini "2012 \ ... etc ..." alt-yolu "görünmez" ya da mevcut değil. Şimdi Kayıt Defteri Düzenleyicisi açık ve ben HKLM'de böyle bir yol olduğunu garanti ediyorum. Windows 7 64bit'deyim. Ne yaptığım hakkında bir fikrin var mı? Bu beni deli ediyor. Teşekkürler ...

+0

bu sorunu çözmek için yönetmek mi? –

+0

Sanırım öyle. Dürüst olmak gerekirse nasıl bitirdiğimi hatırlayamıyorum. Belki de problemi bir şekilde atlatmışımdır. Üzgünüz, daha fazla yardım edemem ... – user1219144

cevap

6

Ayrıca Python'un 64 bit sürümünü mi kullanıyorsunuz, yoksa 32 bitlik bir Python mu? (İkincisi daha yaygındır.) Python'un 32-bit bir sürümünü kullanıyorsanız, _winreg modülü varsayılan olarak 32-bit kayıt defterini görecek, regedit ise 64-bit'i size gösterecektir. Farklı bir görünüm açmak için _winreg'a söyleyebilmeniz gerekir; erişim haklarına ilişkin _winreg modül belgelerine, özellikle subsection on 64-bit specific flags ve the MSDN article it references'a bakın. Ne yazık ki, 64-bit kayıtlara erişmek için 32-bit bir işlem için bir yol gibi görünmüyor, ama bir şey eksik olabilir.

+0

Cevabınız için teşekkür ederiz. Hangi Python sürümüne sahip olduğumu (sys.version_info kullanarak) kontrol ettiğimde (2, 6, 4, 'final', 0) yazıyor. Yine de 64bit veya 32bit bilgi göremiyorum. Ve diğer şey "KEY_WOW64_64KEY" bölümünü nerede kullanacağımı bilmiyorum. Biliyorum, muhtemelen acıklı sesim var ama yardıma ihtiyacım var ... – user1219144

+0

sys.version_info'da 32-versus-64-bit'i göremezsiniz, ancak bunu sys.version'da görebilirsiniz. Orada '32 bit 'veya '64 bit' deyin.) Ayrıca, 'platform.architecture() 'a bakabilirsiniz. Kayıt defterini farklı olarak açtığım gibi, 64-bit bir kayıttan 64-bit bir kayıttan erişebildiğime göre 64-bit kayıt defterine erişebileceğime inanıyorum. Ancak yanılıyor olabilirim; 32-bit kayıt erişimi ile çok fazla şey yapmadım. –

+0

@ThomasWouters: Ayrıca _Windows 7 64-bit_ & _python 2.7.3 (varsayılan, 10 Nisan 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] ile _winreg ile anahtarları okuyamıyorum ] _. @ User1219144 _system belirtilen dosyayı bulamıyor gibi aynı hatayı alıyorum. Bunu test etmek için, bu [WindowsRegistry sınıfı] (http://is.gd/8DV8KL) testisleri ile kullanıyorum. Davranış görüyorum: ** 1. ** koşmak tamam; ** 2. ** koşmak tamam; ** Yeniden Başlatma ** hatası sonrası. Hata ayıklamak için: "START C: \ Python27 \ pythonw.exe C: \ Python27 \ Lib \ idlelib \ idle.py" öğesini bir ** .bat ** dosyasına koyarak, sağ tıklayıp _Run olarak seçerek _IDLE_'yi Yönetici olarak çalıştırmayı deneyin. administrator_ – TrinitronX

9

Erişim anahtarını 64bit erişim tuşlarından biriyle birleştirmeniz gerekir.

_winreg.KEY_WOW64_64KEY 64-bit Windows üzerindeki bir uygulamanın 64 bit kayıt görünümünde çalışması gerektiğini belirtir.

_winreg.KEY_WOW64_32KEY 64 bit Windows üzerindeki bir uygulamanın 32 bit kayıt görünümünde çalışması gerektiğini belirtir.

Dene:

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

Teşekkür ederim! mükemmel çalışır. – virtualsets

+0

Alt anahtarlarınm numaralandırılmayacağı bir sorunla karşılaşıyordum. KEY_WOW64_64KEY'yi ekledikten sonra sorunumu çözdünüz. Teşekkür ederim. – FernandoZ