Чтение реестра на 64-битной машине - PullRequest
1 голос
/ 22 октября 2010

Я разработал 32-битное приложение (сборка для x86), которое позже будет развернуто на 64-битной машине. Я установил некоторую конфигурацию в реестре, чтобы при запуске приложения на 32-разрядной машине не возникало проблем с чтением его значения, но при развертывании на 64-разрядной машине я не могу правильно прочитать значение, так как путь к реестру изменяется , Чтобы прояснить ситуацию, на 32-битной машине запись в реестре выглядит следующим образом.

[HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\InstallationPath]

"папка" = "C: \ Program Files \ MyApplication"

Но когда я смотрю на 64-битной машине, это смещается к:

[HKEY_LOCAL_MACHINE\SOFTWARE\**Wow6432Node**\MyApplication\InstallationPath]

"папка" = "C: \ Program Files \ MyApplication"

Внутри моего приложения мне нужно запросить значение пути установки. Очевидная вещь, которую я сделал, это запрос значения с жестко закодированной строкой "HKLM \ SOFTWARE \ MyApplication \ InstallationPath", но это недопустимо для 64-битной машины.

Как мне преодолеть эту проблему?

Ответы [ 3 ]

1 голос
/ 22 октября 2010

Я не совсем понимаю вашу проблему: Wow6432Node является прозрачным с точки зрения вызывающего абонента.

Это означает, что ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\MyApplication\InstallationPath будет автоматически сопоставлен сHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApplication\InstallationPath при доступе из 32-разрядного приложения, работающего на 64-разрядной машине.

Таким образом, ваш код должен работать "из коробки".

1 голос
/ 14 ноября 2010

Посмотрите на аргумент REGSAM samDesired, равный RegOpenKeyEx и многие другие API-интерфейсы реестра.

Важным для вас является KEY_WOW64_64KEY : "Указывает, что приложение в 64-битной Windows должно работать в 64-битном представлении реестра. Подробнее см. Доступ к Альтернативное представление реестра . "

Вы можете использовать это в 32-битном приложении, чтобы заставить его проверять ключи реестра в «родных» 64-битных областях в 64-битной системе. (Возможно, вы захотите проверить, что вы работаете в 64-битной Windows и только тогда пропустите флаг; я не уверен, что он будет делать на 32-битной машине. Передайте ноль для samDesired, когда вы хотите обработку по умолчанию. )

0 голосов
/ 22 октября 2010

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

. Чтобы убедиться в этом, запустите 32-разрядную сборку regedit.exe (доступна под Windows\SysWOW64) и посмотрите вокругреестр.

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