C# 将序列化到yaml的键值导入注册表

文章介绍了如何使用C#将Windows注册表的键值导出为YAML格式,包括定义数据结构、读取和创建子键、保存值等内容,最后展示了完整导入注册表的示例。

写在前面

通常用下面的代码就可以将导出的注册表文件 test.reg,静默导入到注册表中。

Process process = Process.Start("regedit.exe", "/s test.reg");
process.WaitForExit();

 由于后续的业务需要做统一的管理,所以采用了自定义的数据结构来做序列化;上篇做了导出到yaml的介绍,文中有定义了具体的yaml持久化数据结构,本文就不做敷述了;详细内容参照:

C# 将注册表的键值导出成yaml-优快云博客

相关代码

        private void CreateRegistryKey()
        {
            var targetKey = "MongoDB";
            var targetDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "key_files");
            var targetFile = Path.Combine(targetDir, $"{targetKey}.yml");
            if (File.Exists(targetFile))
            {
                var controlSet001Key = RegistryHelper.GetRegistryKey(@"SYSTEM\ControlSet001\Services");
                var content = File.ReadAllText(targetFile);
                var keyItem = YamlHelper.Deserialize<KeyItem>(content);
                if (keyItem != null)
                {
                    TryCreateKeyValue(controlSet001Key, keyItem);
                }
                controlSet001Key.Close();
            }
        }

        private void TryCreateKeyValue(RegistryKey parentKey, KeyItem keyItem)
        {
            if (keyItem.Type == 0) // 0 is key not value
            {
                RegistryKey targetKeyItem = parentKey.OpenSubKey(keyItem.Name, true);
                if (targetKeyItem == null)
                {
                    targetKeyItem = parentKey.CreateSubKey(keyItem.Name);
                }
                if (keyItem.Children != null && keyItem.Children.Count > 0)
                {
                    foreach (var item in keyItem.Children)
                    {
                        TryCreateKeyValue(targetKeyItem, item);
                    }
                }
                targetKeyItem.Close();
            }
            else
            {
                parentKey.SetValue(keyItem.Name, keyItem.Value, (RegistryValueKind)keyItem.Type);
            }
        }

 执行代码后yaml文件中的键值完整的导入到注册表中

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值