C#注册表搜索,从结果反向遍历



在找到并使用注册表编辑以允许通过资源管理器访问后,我正在摆弄我的Windows Phone。我的目标是编写一个快速控制台应用程序,在它插入的任何机器上执行注册表编辑。

这是WINDOWS 7注册表。不是电话以下是我尝试遵循的步骤

到目前为止,我已经编写了代码,可以找到包含"ZuneDriver"的设备注册表项的所有实例

RegistryKey start = Registry.LocalMachine;
    using (RegistryKey root = start.OpenSubKey(@"SYSTEMCurrentControlSetEnumUSB"))
    {
        string myKey = "ZuneDriver";
        SearchSubKeys(root, myKey);

这里的问题是,注册表项"ZuneDriver"是"设备参数"项的子项,我需要更改值。

目前,搜索结果存储在:中

    static System.Collections.Specialized.StringCollection log = new System.Collections.Specialized.StringCollection();

通过我的搜索功能:

public static void SearchSubKeys(RegistryKey root, String searchKey)
{
    foreach (string keyname in root.GetSubKeyNames())
    {
        try
        {
            using (RegistryKey key = root.OpenSubKey(keyname))
            {
                if (keyname == searchKey)
                {
                    log.Add(key.Name);
                }

                SearchSubKeys(key, searchKey);
            }
        }
        catch (System.Security.SecurityException)
        {
        }
    }
}

存储的结果如下所示:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_045E&PID_04EC&MI_00\7&b85dba6&0&0000\设备参数\ZuneDriver

我想让我的程序注册访问:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_045E&PID_04EC&MI_00\7&b85dba6&0&0000\设备参数

编辑名为"ShowInShell"的DWORD值

但需要确定\VID_045E&PID_04EC&MI_00\7&b85dba6&0&0000\通过初始搜索。。。。。

任何建议或建议都非常感谢:)

干杯,

Ben

我会这样做:

public static void SearchSubKeys(RegistryKey root, String searchKey)
{
    bool containsKey = false;
    foreach (string keyname in root.GetSubKeyNames())
    {
        try
        {
            using (RegistryKey key = root.OpenSubKey(keyname))
            {
                if (keyname == searchKey)
                {
                    containsKey = true;
                }
                SearchSubKeys(key, searchKey);
            }
        }
        catch (System.Security.SecurityException)
        {
        }
    }
    if(containsKey){
        using (RegistryKey key = root.CreateSubKey("Device Parameters"))
        {
            key.SetValue("ShowInShell", /* your value */, RegistryValueKind.DWord);
        }
    }
}

最新更新