https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.registryview?view=netframework-4.7
On the 64-bit version of Windows, portions of the registry are stored separately for 32-bit and 64-bit applications. There is a 32-bit view for 32-bit applications and a 64-bit view for 64-bit applications.
You can specify a registry view when you use the OpenBaseKey and OpenRemoteBaseKey(RegistryHive, String, RegistryView) methods, and the FromHandle property on a RegistryKey object.
If you request a 64-bit view on a 32-bit operating system, the returned keys will be in the 32-bit view.
A 32-bit application on a 64-bit OS will be looking at the HKLMSoftwareWow6432Node
node by default. To read the 64-bit version of the key, you'll need to specify the RegistryView
:
using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
using (var key = hklm.OpenSubKey(@"SOFTWAREMicrosoftWindowsCurrentVersionUninstall"))
{
// key now points to the 64-bit key
}