Do OpenSubKey() and other Microsoft.Win32 registry functions return null on 64-bit systems when 32-bit registry keys are under Wow6432node in the registry?
I'm working on a unit testing framework that makes a call to OpenSubKey() from the .NET library.
My development system is a Windows 7 64-bit environment with Visual Studio 2008 SP1 and the Windows 7 SDK installed.
The application we're unit testing is a 32-bit application, so the registry is virtualized under HKLM\Software\Wow6432node
. When we call:
Registry.LocalMachine.OpenSubKey( @"Software\MyCompany\MyApp\" );
Null is returned, however explicitly stating to look here works:
Registry.LocalMachine.OpenSubKey( @"Software\Wow6432node\MyCompany\MyApp\" );
From what I understand this function should be agnostic to 32-bit or 64-bit environments and should know to jump to the virtual node.
Even stranger is the fact that the exact same call inside a compiled and installed version of our application is running just fine on the same system and is getting the registry keys necessary to run; which are also being placed in HKLM\Software\Wow6432node
.
What should I do?
It sounds like your unit testing project compiles to 64 bit. In the Compile
settings of your unit testing project, set the "Target CPU" to x86
(instead of AnyCPU
).