C # Access 64-битный реестр - PullRequest
       33

C # Access 64-битный реестр

11 голосов
/ 05 августа 2011

Мне было интересно, можно ли получить доступ к следующему разделу реестра в C # на 64-разрядном компьютере.

HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run

При доступе к32-битный ПК работает нормально, но на 64 он перенаправляет его на собственный 64-битный путь HKLM \ SOFTWARE \ Wow6432Node, который имеет разные ключи.Я просмотрел различные статьи на эту тему, но не могу найти однозначного ответа о том, как получить доступ к 32-битному ключу на 64-битном ПК в C #.Спасибо.

Ответы [ 5 ]

13 голосов
/ 05 августа 2011

Если вы нацеливаетесь на .Net Framework версии 4.0 или выше, вы можете сделать это, передав значение RegistryView.Registry32 при открытии нужного ключа реестра.

Если вы нацеливаетесьпредыдущей версии .Net Framework, то вам нужно использовать P / Invoke для непосредственного вызова RegOpenKeyEx , что позволит вам передать флаг KEY_WOW64_32KEY .

СуществуетЗдесь приведено более подробное руководство:

5 голосов
/ 05 августа 2011

Проект + Свойства, вкладка "Сборка", цель платформы = любой ЦП. Для доступа к 64-разрядному реестру из 32-разрядного приложения требуется .NET 4 и новый метод RegistryKey.OpenBaseKey () с параметром RegistryView.Registry64.

Это позволяет только читать ключ, для записи значений ключей требуется повышение UAC. Вы можете писать в HKCU без повышения прав и без перенаправления реестра.

5 голосов
/ 05 августа 2011

Скомпилируйте ваше приложение в x64 , и все должно быть хорошо. В Visual Studio 2010 это можно сделать, изменив параметр в Project Properties > Build

enter image description here

Для пользователей VS Express:

В VC # Express это свойство отсутствует, но вы все равно можете создать Конфигурация x86, если вы знаете, где искать.

Это выглядит как длинный список шагов, но как только вы знаете, где эти все намного проще. Любой, у кого есть только VC # Express вероятно, сочту это полезным. Как только вы узнаете о Configuration Manager, в следующий раз это будет намного более интуитивно понятно.

  1. В VC # Express перейдите в Инструменты -> Параметры.
  2. В левом нижнем углу диалогового окна «Параметры» установите флажок говорит: «Показать все настройки».
  3. В виде дерева слева выберите «Проекты и Решения».
  4. В опциях справа установите флажок "Показать расширенные конфигурации сборки. "
  5. Нажмите ОК.
  6. Перейти в Build -> Configuration Manager ...
  7. В столбце «Платформа» рядом с вашим проектом щелкните поле со списком и выберите "".
  8. В настройке «Новая платформа» выберите «x64».
  9. Нажмите ОК.
  10. Нажмите Закрыть.
  11. Теперь у вас есть конфигурация x64! Проще простого! : -)
2 голосов
/ 05 августа 2011

Обратно, Wow6432Node для 32-битных приложений.Так что если ваше приложение si 32-разрядное (x86), то вы автоматически будете перенаправлены на этот «узел».

Вы можете использовать метод FromHandle в .NET 4, чтобы указать, какое представление следуетиспользовать, но это использование не очень очевидно, и могут быть проблемы .

Этот ответ решает этот вопрос с помощью Win32 API, который вы можете использовать в C # какхорошо.

1 голос
/ 05 августа 2011

Предположим, для перенаправления.Вам нужно обнаружить это перенаправление и вместо этого прочитать ключ WoW6432Node.HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run - это 64-разрядный реестр, к которому могут обращаться только 64-разрядные приложения.

Очевидно, вы должны написать код для поддержки обоих типов.

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