views:

128

answers:

2

My program is trying to create an key on the

HKLM\Software\Microsoft\Shared Tools\MSCONFIG\startupreg\test\

but instead the key is created on the

HKLM\Wow6432node\Software\Microsoft\Shared Tools\MSCONFIG\startupreg\test\

and don't work properly... Why? How can I solve it?

A: 

You can use:

import _winreg
_winreg.DisableReflectionKey()
# do stuff here
_winreg.EnableReflectionKey()

This only works in Python 2.6 and above however.

Lee
what kind of argument I need here? It's asking for one
Shady
A: 

The docs on reflection-key features in winreg are scarce (and bits and pieces are missing). You really need this patch, but until it's applied and a new micro-release of Python is made with these fixes, at least you can try the DisableReflectionKey etc route according to the docs that patch adds (here's the RST for them):

+.. function:: DisableReflectionKey(key)
+   
+   Disables registry reflection for 32-bit processes running on a 64-bit
+   Operating System.
+   
+   *key* is an already open key, or one of the predefined :const:`HKEY_\*`
+   constants.
+   
+   Will generally raise :exc:`NotImplemented` if executed on a 32-bit
+   Operating System.

+   If the key is not on the reflection list, the function succeeds but has no
+   effect. Disabling reflection for a key does not affect reflection of any
+   subkeys.

+
+.. function:: EnableReflectionKey(key)
+
+   Restores registry reflection for the specified disabled key.
+   
+   *key* is an already open key, or one of the predefined :const:`HKEY_\*`
+   constants.
+
+   Will generally raise :exc:`NotImplemented` if executed on a 32-bit
+   Operating System.
+   
+   Restoring reflection for a key does not affect reflection of any subkeys.
+
+
+.. function:: QueryReflectionKey(key)
+
+   Determines the reflection state for the specified key.
+   
+   *key* is an already open key, or one of the predefined :const:`HKEY_\*`
+   constants.
+   
+   Returns ``True`` if reflection is disabled.
+
+   Will generally raise :exc:`NotImplemented` if executed on a 32-bit
+   Operating System.
Alex Martelli
no success at all =/... tried _winreg.DisableReflectionKey(_winreg.HKEY_LOCAL_MACHINE), or with some const of a opened key but noting happens
Shady