在注册表中复制子类别

Edg*_*gar 2 c# windows registry

有人可以建议如何将注册表中一个子类别的内容复制到另一个子类别的最佳方法吗?

例如,我们有:

HKEY_CURRENT_USER.Software.MyProgram.ver_1 
Run Code Online (Sandbox Code Playgroud)

并运行函数检查,如果没有ver_2,那么创建... MyProgram.ver_2并复制所有内容... MyProgram.ver_1.

Wal*_*lly 6

扩展方法:

public static void CopyTo(this RegistryKey src, RegistryKey dst)
{
    // copy the values
    foreach (var name in src.GetValueNames())
    {
        dst.SetValue(name, src.GetValue(name), src.GetValueKind(name));
    }

    // copy the subkeys
    foreach (var name in src.GetSubKeyNames())
    {
        using (var srcSubKey = src.OpenSubKey(name, false))
        {
            var dstSubKey = dst.CreateSubKey(name);
            srcSubKey.CopyTo(dstSubKey);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样称呼:

var ver1 = Registry.CurrentUser.OpenSubKey(@"Software\MyProgram\ver_1");
var ver2 = Registry.CurrentUser.OpenSubKey(@"Software\MyProgram\ver_2");
ver1.CopyTo(ver2);
Run Code Online (Sandbox Code Playgroud)

  • 你可能想在 `GetValue` 调用上指定标志 `DoNotExpandEnvironmentNames`,否则你不会对 `REG_EXPAND_SZ` 值进行真正的复制 (2认同)