Вероятно, это связано с UAC (контроль учетных записей пользователей).Дополнительный уровень защиты для Windows Vista и Windows 7.
Вам потребуется запросить разрешения в реестре.
РЕДАКТИРОВАТЬ : Ваш код прямо сейчас:
var keys = Registry.LocalMachine.OpenSubKey("SOFTWARE")
.OpenSubKey("Microsoft")
.OpenSubKey("Cryptography", RegistryKeyPermissionCheck.ReadSubTree)
.GetValueNames();
Запрашивает только разрешения для подраздела Криптография, возможно, это вызывает проблему (по крайней мере, у меня это было один раз), поэтому новый код будет:
var keys = Registry.LocalMachine.OpenSubKey("SOFTWARE", RegistryKeyPermissionCheck.ReadSubTree)
.OpenSubKey("Microsoft", RegistryKeyPermissionCheck.ReadSubTree)
.OpenSubKey("Cryptography", RegistryKeyPermissionCheck.ReadSubTree)
.GetValueNames();
EDIT2:
Я прикрепил к нему отладчик, на этот код:
var key1 = Registry.LocalMachine.OpenSubKey("SOFTWARE", RegistryKeyPermissionCheck.ReadSubTree);
var key2 = key1.OpenSubKey("Microsoft", RegistryKeyPermissionCheck.ReadSubTree);
var key3 = key2.OpenSubKey("Cryptography", RegistryKeyPermissionCheck.ReadSubTree);
var key4 = key3.GetValueNames();
Оказывается, вы можете прочитать это конкретное значение, по крайней мере, это мое предположение, потому что все данные верныДо тех пор, пока я не открою ключ 3, значение ValueCount будет равно нулю вместо ожидаемого 1.
Я думаю, что это специальное значение, которое защищено.