Why is OpenSubKey() returning null on my Windows 7 64-bit system?

.net, 64-bit, registry

Solution

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`).

Problem

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?

Original source

Related problems