OpenSubKey под HKLM \ Software, возвращающее ноль - PullRequest
9 голосов
/ 07 сентября 2010

Вот мой код:

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ADM");

Запись реестра существует на компьютере.ключ всегда нулевой.

Я не думаю, что это проблема безопасности.Я работаю как администратор.(Я даже явно запускал сборку в режиме администратора).

Я использую Visual Studio 2010 под управлением Windows 7 64bit.

Ответы [ 3 ]

15 голосов
/ 07 сентября 2010

Проблема в том, что у меня 64-битная версия, а мое приложение скомпилировано как 32-битная.

Ключ читается:

Microsoft.Win32.RegistryKey key = 
    Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE");

Не HKLM\SOFTWARE, а HKLM\SOFTWARE\Wow6432Node\. Компиляция приложения как x64 решает проблему.

2 голосов
/ 13 мая 2012

Попробуйте открыть каждый раздел реестра по отдельности, например:

Microsoft.Win32.RegistryKey key1 = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE");
Microsoft.Win32.RegistryKey key2 = key1.OpenSubKey(@"ADM");

Вместо использования строки @ "SOFTWARE \ ADM";

0 голосов
/ 07 сентября 2010

Я запустил ваш код с другим именем приложения (для которого у меня есть ключ), и все было в порядке, поэтому код в порядке, но я проверил это на Win XP.

При изучении записи в реестр я обнаружил эту статью о виртуализации реестра в Windows 7, которая может вызвать ваши проблемы:

Windows Vista и более поздние версииWindows улучшает совместимость приложений для этих приложений, автоматически перенаправляя эти операции.Например, операции реестра в глобальном хранилище (HKEY_LOCAL_MACHINE \ Software) перенаправляются в расположение пользователя для каждого профиля пользователя, известного как виртуальное хранилище (HKEY_USERS \ _Classes \ VirtualStore \ Machine \ Software).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...