Доступ к реестру с помощью C # и «BUILD x86» на 64-битной машине - PullRequest
7 голосов
/ 05 июля 2011

У меня есть приложение (написанное на C #), которое работает на Windows Server 2008 (64-битная версия). В этом приложении я должен проверить некоторые ключи реестра, касающиеся IIS. Среди прочего я хочу получить доступ к ключу HKEY_LOCAL_MACHINE \ Software \ Microsoft \ InetStp \ Components \ WMICompatibility " проверить, включен ли режим совместимости IIS 6 или нет. Для этого я использую Registry.GetValue из Microsoft.Win32 .

По некоторым причинам решение должно быть скомпилировано с x86 . Следствием этого является то, что больше невозможно получить доступ к HKEY_LOCAL_MACHINE \ Software \ Microsoft \ InetStp \ Components , но все еще можно прочитать ключ из HKEY_LOCAL_MACHINE \ Software \ Microsoft \ InetStp . При компиляции с помощью « AnyCPU » - отметьте, что доступ к реестру работает нормально.

Так в чем же причина такого поведения? Есть ли решение или решение этой проблемы?

Ответы [ 2 ]

12 голосов
/ 05 июля 2011

Вы нарушаете перенаправление реестра .

Лучшее решение - открыть 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.

3 голосов
/ 05 июля 2011

Windows x64 имеет отдельный узел для программ x86 (не самая яркая идея)

Все ключи реестра будут находиться под HKEY_LOCAL_MACHINE \ Software \ WOW6432Node

Подробнее об этомПроблема:
Как просмотреть системный реестр с помощью 64-разрядных версий Windows

Программа все еще «думает», что пишет по тому же пути.

Я бы посоветовал вам исправить вашу программу установки (отправки), чтобы написать начальные настройки в нужном месте.

Редактировать , Некоторая «информация» из MSDN:

Ключи реестра, на которые влияет WOW64

...