循环访问注册表项并读取注册表值

本文关键字:注册表 读取 访问 循环 | 更新日期: 2023-09-27 18:36:44

我想遍历特定路径的值并读取它们。我试过这个

代码已更新

RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software'Microsoft'Internet Explorer'IntelliForms'Storage2", true);
        var names = key.GetValueNames();
        for (int i = 0; i < names.Length; i++)
            {
                Console.WriteLine(names[i]);
                byte[] test = ObjectToByteArray(key.GetValue(names[i]));
                var value = Convert.ToBase64String(test);
                Console.WriteLine(value);
            };

通常,字符串value应该是加密的二进制文件。

更新:因此,正如@Peter Lillevold建议的那样,我必须将字节数组转换为字符串。为此,我创建了这个小函数来将对象key.GetValue转换为字节数组

public static byte[] ObjectToByteArray(Object obj)
        {
            if (obj == null)
                return null;
            BinaryFormatter Binaryform = new BinaryFormatter();
            MemoryStream MemStream = new MemoryStream();
            Binaryform.Serialize(MemStream, obj);
            return MemStream.ToArray();
        }

然后按照@Peter的建议转换为字符串。

因此,在转换字节数组之后,它应该向我返回一串二进制文件。我得到的是字母和数字的一些奇怪组合,但它不是二进制的。

对此有任何帮助吗?

循环访问注册表项并读取注册表值

你会得到"System.Byte[]",因为你拿了一个byte[]的实例并在其上调用ToString()。这不会将字节数组的内容转换为文本,因为您将使用 Convert.ToBase64StringEncoding.UTF8.GetString .在这个SO问题中对这个主题进行了更多讨论。