Search code examples
pythonwindowsregistry64-bit

How can I turn off registry redirection on Python?


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?


Solution

  • 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.