Вы нарушаете перенаправление реестра .
Лучшее решение - открыть 64-битное представление реестра, например:
using Microsoft.Win32;
...
RegistryKey registryKey =
RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).
OpenSubKey(@"Software\Microsoft\InetStp\Components");
object value = registryKey.GetValue(@"WMICompatibility");
Если вы хотите, чтобы ваш код работал как на 32-, так и на 64-битных компьютерах, вам нужно кодировать некоторые переключения между представлениями реестра.
Примечание : возможность доступа к 64-битным представлениям из 32-битных процессов была добавлена только в библиотеки .net в .net 4. Похоже, что до этого вам нужно было использовать нативные API, например с P / Invoke.