2012-02-19 16 views
10

Sto provando ad accedere al registro di Windows (in Python) per interrogare un valore chiave usando _winreg e non riesco a farlo funzionare. La seguente riga restituisce un WindowsError dicendo che il "sistema non trova il file specificato":Python _winreg woes

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

Dopo ore di tentativi, sembra che Python non può vedere al di là della parte "Maya" del percorso (sembra che il "2012 \ ... etc ..." il sotto-percorso è "invisibile" o inesistente). Ora ho aperto l'editor del registro e garantisco che esiste un percorso simile in HKLM. Sono su Windows 7 a 64 bit. Qualche idea su cosa sto facendo male? Questo mi sta facendo impazzire. Grazie ...

+0

siete riusciti a risolvere questo problema? –

+0

Penso di sì. Onestamente non riesco a ricordare come ho fatto a fare però. Forse ho aggirato il problema in qualche modo. Spiacente non posso essere di ulteriore aiuto ... – user1219144

risposta

6

Stai anche utilizzando una versione a 64 bit di Python, oppure è un Python a 32 bit? (Quest'ultimo è più comune). Se stai usando una versione a 32 bit di Python, il modulo _winreg vedrà il registro a 32 bit per impostazione predefinita, mentre regedit ti mostrerà quello a 64 bit. Dovresti essere in grado di dire a _winreg di aprire una vista diversa; vedere i documenti del modulo _winreg sui diritti di accesso, in particolare lo subsection on 64-bit specific flags e the MSDN article it references. Sfortunatamente non sembra che ci sia un modo per un processo a 32 bit di accedere al registro a 64 bit, ma potrei mancare qualcosa.

+0

Grazie per la risposta. Quando controllo quale versione di Python ho (usando sys.version_info) dice (2, 6, 4, 'final', 0). Tuttavia non riesco a vedere alcuna informazione a 64 bit o 32 bit. E l'altra cosa è che non so dove usare la parte "KEY_WOW64_64KEY". Lo so, probabilmente mi sembra patetico ma ho bisogno di aiuto ... – user1219144

+0

Non puoi vedere 32-versus-64-bit in 'sys.version_info', ma puoi vederlo in' sys.version' (sarà dì '32 bit 'o '64 bit' lì dentro. Puoi anche guardare 'platform.architecture()'. Per quanto riguarda l'apertura del registro in modo diverso, come ho detto non credo che sia possibile accedere al registro a 64 bit da un processo a 32 bit nel modo in cui è possibile accedere sia da un processo a 64 bit. Potrei sbagliarmi, comunque; Non ho mai fatto molto con l'accesso al registro a 32 bit. –

+0

@ThomasWouters: Non riesco a leggere le chiavi con '_winreg' su _Windows 7 64-bit_ & _python 2.7.3 (predefinito, 10 aprile 2012, 23:24:47) [MSC v.1500 64 bit (AMD64) ] _. Ottengo lo stesso errore di @ user1219144 _system non riesce a trovare il file specificato_. Per testare questo, sto usando questa [classe WindowsRegistry] (http://is.gd/8DV8KL) con i testicoli. Comportamento che vedo: ** 1 ° ** corri ok; ** 2 ° ** corri ok; ** Dopo l'errore di riavvio **. Per eseguire il debug: prova a eseguire _IDLE_ come amministratore mettendo 'START C: \ Python27 \ pythonw.exe C: \ Python27 \ Lib \ idlelib \ idle.py' in un file **. Bat **, facendo clic con il pulsante destro del mouse e scegliendo _Run come administrator_ – TrinitronX

9

È necessario combinare la chiave di accesso con uno dei tasti di accesso a 64 bit.

_winreg.KEY_WOW64_64KEY Indica che un'applicazione su Windows a 64 bit deve funzionare sulla vista del registro a 64 bit.

_winreg.KEY_WOW64_32KEY Indica che un'applicazione su Windows a 64 bit deve funzionare sulla vista del registro a 32 bit.

Prova:

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

Grazie !!! funziona perfettamente – virtualsets

+0

Stavo riscontrando un problema in cui le mie chiavi secondarie non venivano enumerate. L'aggiunta del KEY_WOW64_64KEY come hai detto ha risolto il mio problema. Grazie. – FernandoZ