gpt4 book ai didi

c# - 使用 OpenSubKey 找不到存在的节点

转载 作者:行者123 更新时间:2023-12-02 21:43:26 24 4
gpt4 key购买 nike

我正在使用千篇一律的代码来获取 C# 中的注册表项对象:

RegistryKey reg = Registry.LocalMachine.OpenSubKey("SOFTWARE\\MyNewKeyName\\");

运行此代码后reg = null。但是,如果我将传递给 OpenSubKey 的值切换为 SOFTWARE 下具有其他节点的注册表中的任何值,reg现在有一个值。我已经尝试过使用这种模式的多个键并且它有效。如果我输入任何没有其他子节点的键名称,它将不起作用。最终,我尝试读取 MyNewKeyName 内的字符串值。

如果我的键下面没有任何其他节点,为什么我的代码不起作用并且 reg 被填充?

最佳答案

事实证明,“32 位”注册表和“64 位”注册表中的值并不相同。因此,当通过“regedit”查看注册表并看到所有内容时,以编程方式您可能看不到,这就是我遇到的问题。我通过运行 GetSubKeyNames() 并检查返回的 key 注意到了这一点。快速的答案是检查注册表的两个版本以找到所需的值:

    //Check the 64-bit registry for "HKEY_LOCAL_MACHINE\SOFTWARE" 1st:
RegistryKey localMachineRegistry64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey reg64 = localMachineRegistry64.OpenSubKey(registryKeyLocation, false);

if (reg64 != null)
{
return reg64.GetValue(registryKeyName, true).ToString();
}

//Check the 32-bit registry for "HKEY_LOCAL_MACHINE\SOFTWARE" if not found in the 64-bit registry:
RegistryKey localMachineRegistry32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey reg32 = localMachineRegistry32.OpenSubKey(registryKeyLocation, false);

if (reg32 != null)
{
return reg32.GetValue(registryKeyName, true).ToString();
}

关于c# - 使用 OpenSubKey 找不到存在的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19960400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com