Я пытаюсь извлечь некоторые данные из установленного в настоящий момент Office Click-To-Run.
Я прочитал эти сообщения: Не могу прочитать ключ реестра или OpenSubKey () возвращает значение NULL для ключа реестра, который я вижу в regedit.exe
Я на Windows 10 64bit. Мое приложение представляет собой надстройку Outlook, поэтому я не могу изменить целевую платформу (32/64-битную), именно Хост определяет, работаю ли я в 32-битной или 64-битной среде. Поэтому я должен разобраться в обоих случаях.
Итак, у меня есть этот (тестовый) код:
using (var hklmTest64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
{
var test = hklmTest64.GetValue(@"SOFTWARE\Microsoft\Office\ClickToRun\Configuration\AudienceData");
if (test == null)
{
using (var hklmTest32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32))
{
test = hklmTest32.GetValue(@"SOFTWARE\Microsoft\Office\ClickToRun\Configuration\AudienceData");
}
}
}
Итак, я сначала извлекаю ключ реестра, используя 64-битное представление, затем, если значение NULL, повторяю, используя 32-битное представление.
Проблема: проверка всегда NULL
.
Конечно, ключ существует, и я могу увидеть его, используя regedit:
Конечно, я сначала попробовал простой код, который до сих пор всегда работал для меня, но не работает для получения этого ключа:
test = Registry.LocalMachine.GetValue(@"SOFTWARE\Microsoft\Office\ClickToRun\Configuration\AudienceData");
test = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\Configuration", "AudienceData", null);
И что еще более странно, у меня была точно такая же проблема с получением номера сборки Windows. Этот код не работал:
var wBuild = Registry.LocalMachine.GetValue(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ReleaseId");
Но это прекрасно работает для сборки Windows (не для ключа Outlook):
var wBuild = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "ReleaseId", null);
Есть идеи, как получить этот раздел реестра?
ОБНОВЛЕНИЕ 1
См. Сообщение C # get Office. Ключ реестра Office ClickToRun возвращает ноль
Но, читая пост, мой код, использующий RegistryView.RegistryXX
, должен работать ...
ОБНОВЛЕНИЕ 2
Я воспроизвел проблему с помощью LinqPad, так что это не связано с хостом / надстройкой Outlook. Я попытался перепродать в .NET Fiddle, но на самом деле код не имеет доступа к реестру:)
Я могу получить правильные значения, используя P / Invoke, как объяснено в этой статье . Так что для меня это явно проблема 32 / 64bit (wow6432node).