2015-06-02 2 views
0

Я прочитал почти все другие вопросы к этой теме, но они обычно решаются с использованием неправильного представления архитектуры в реестре.Registry OpenSubkey возвращает null, хотя он есть

Я пытаюсь открыть подраздел в «... \ Outlook \ Addins». У меня есть подраздел, доступный для обеих архитектур («HKLM \ Software ...» и «HKLM \ Software \ Wow3264Node ...» ). Но через тестирование я знаю, что код выглядит под «WOW6432Node».

Итак, вот фрагмент кода.

var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Default); 
var reg = hklm.OpenSubKey(@"Software\Microsoft\Office\Outlook\Addins\MyAddin", false); 

Я также попытался

var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Registry32); 
var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Registry64); 

отладить его и искал подразделов, которые видны, которые дают мне все другие записи (даже вновь созданные из них), но не один я ищу для.

Я также проверил разрешения на регистрацию, которые являются такими же, как и для других, которые я вижу.

Итак, почему я всегда получаю null для «reg»?

Редактировать: Может быть, я должен добавить, что я ищу этот ключ изнутри addin. При попытке его от короткого консольного приложения тест, я вижу подключ при вызове

reg.GetSubKeyNames(); 
+0

спасибо, Джеральд, за добавление тега – Andreas

ответ

0

Как кажется, это функция безопасности. Невозможно получить доступ к ветви реестра добавителя, которая его ищет. Информацию, которую я хотел бы сохранить там, нужно было хранить где-то в другом месте.

0

Попробуйте изменить этот

var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Default); 

к этому

var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Registry64); 

При запуске 32-битное приложение на 64-битной ОС он пытается найти Wow6432Node автоматически. Другой способ, возможно, состоит в том, чтобы скомпилировать его для архитектуры x64.

Дополнительная информация о перечислении RegistryView содержится на MSDN. Обратите внимание на эту строку;

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

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

+0

Уже пробовал, поэтому я написал новый вопрос. Subkey доступен в «HKLM \ Software \ ...» и «HKLM \ Software \ Wow3264Node \ ...» Итак, в любом случае он должен быть видимым, что он есть, в коротком консольном приложении, где я сделал копировать и вставлять, но не изнутри самого аддина. Я отредактировал вопрос, чтобы сделать это более понятным. – Andreas

Смежные вопросы