Windows 64-разрядный реестр против 32-разрядного реестра

Я слышал о архитектуре Windows x64, чтобы поддерживать запуск приложения x86 и x64, есть два разных / разных набора реестра Windows: один для приложения x86 для доступа, а другой для приложения x64 для доступа? Например, если COM регистрирует CLSID в наборе реестра x86, то приложение x64 никогда не сможет получить доступ к COM-компоненту с помощью CLSID, потому что у x86 / x64 есть разные наборы реестра?

Итак, мой вопрос заключается в правильности моего понимания вышеприведенного образца? Я также хочу получить еще несколько документов, чтобы узнать эту тему, о двух разных наборах реестра для архитектуры x64. (Я сделал поиск, но не нашел никакой ценной информации.)

Я столкнулся с этим вопросом недавно. Короткий ответ заключается в том, что если вы запускаете 32-битное приложение на 64-битной машине, то это ключи реестра расположены под Wow6432Node.

Например, предположим, что у вас есть приложение, в котором хранятся данные реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\CompanyX 

Если вы скомпилируете свое приложение в виде 64-битного двоичного файла и запустите его на 64-битной машине, то ключи реестра находятся в указанном выше расположении. Однако, если вы скомпилируете свое приложение в виде 32-битного двоичного файла и запустите его на 64-битной машине, тогда данные реестра будут расположены здесь:

 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\CompanyX 

Это означает, что если вы запускаете 32-разрядную и 64-разрядную версии вашего приложения на одном компьютере, каждый из них будет искать другой набор ключей реестра.

Ваше понимание верное. Не было бы необходимости в приложении x64 для доступа к CLISID x86, поскольку он никогда не сможет загрузить эти компоненты в любом случае и наоборот.

Если вы хотите создать компонент для использования как x86, так и x64, вам нужно либо создать пару DLL, построенных для x86, а другую для x64 и зарегистрировать их в соответствующих частях реестра. Regsrv32.exe в папке System32 будет неправильно регистрировать компонент x64, а файл regsrv32.exe в папке SysWOW64 зарегистрирует компонент x86.

Альтернативно создайте сборку .NET для любого CPU, который может использоваться либо архитектурой процессора.

Они не являются отдельными реестрами – один является подназдой другого, а ОС выполняет виртуализацию, чтобы убедиться, что 32-разрядные приложения получают ключи и 64-битные приложения получают свои ключи.

Вот статья Википедии о реестре WOW64, которая может дать вам некоторую информацию, которую вы ищете:

http://en.wikipedia.org/wiki/WOW64

Я запускаю x64-разрядную машину в качестве рабочего стола; и я никогда не сталкивался с проблемами с различными конфигурациями реестра.

По MSDN, по-видимому, существует разница: http://msdn.microsoft.com/en-us/library/ms724072(VS.85).aspx

НТН

Как зарегистрировать сборку .NET, которая будет использоваться как COM в чистом 64-битном приложении?

Проблема. По умолчанию, если вы включили «Регистрация для COM-взаимодействия» в настройках сборки, он НЕ регистрирует библиотеку типов для 64-разрядных.

Решение. Чтобы зарегистрировать свою сборку, которая не находится в GAC на 64-битной машине, откройте окно cmd и выполните:

 cd c:\windows\microsoft.net\framework64\v2.x.xxxxx regasm /codebase "path to your compiled assembly dll" 

Это исключит «Class Not Registered Error» при использовании встроенного C ++ для инициализации сборки .NET как COM-объекта.

  • Прямой просмотр программы
  • Рисование символа в VGA-памяти с встроенной сборкой GNU C
  • Самая быстрая встроенная спин-блокировка
  • ошибка A2070: неверные операнды команд
  • Имеет ли смысл использовать инструкцию LFENCE для процессоров x86 / x86_64?
  • Как напечатать целое число в программировании уровня сборки без printf в библиотеке c?
  • Самый быстрый способ сделать горизонтальную векторную сумму float на x86
  • Заказ локального распределения переменных в стеке
  • Что делает NOPL в системе x86?
  • Какие целые операции с дополнением 2 можно использовать без обнуления высоких бит в входах, если требуется только низкая часть результата?
  • Почему GCC, скомпилированный программой C, нуждается в разделе .eh_frame?
  • Давайте будем гением компьютера.