繁体   English   中英

从C#读取注册表项

[英]Reading registry keys from c#

我正在尝试获取当前安装的Office即点即用的一些数据。

我已阅读以下文章: 无法读取注册表项OpenSubKey()对于regedit.exe中可以看到的注册表项返回null
我在Windows 10 64位上。 我的应用程序是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看到它:

注册表项可通过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#获取Office ClickToRun注册表项返回null的帖子,但阅读该帖子,我使用RegistryView.RegistryXX代码应该可以工作...

更新2

我已经使用LinqPad重现了该问题,所以这不是由于Outlook主机/加载项。 我试图在.NET Fiddle中进行复制,但实际上代码不允许访问注册表:)

我可以用P中的正确值/调用像解释在这篇文章中 因此对我来说,这显然是一个32/64位(wow6432node)问题。

你不需要

RegistryKey.OpenBaseKey

只需使用Registry.GetValue(keyName, valueName, defualt value)

这是工作的例子

string InstallPath = (string)Registry.GetValue(@"HKEY_LOCAL_MACHINE\\SOFTWARE\\" + path, "ActivationCode", null);

我可以使用P / Invoke获得正确的值,如本文所述。 因此对我来说,这显然是一个32/64位(wow6432node)问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM