在子项值中查找匹配项

时间:2008-12-15 12:58:40

标签: c# registry

我遇到以下两项问题:

  • 如何检索ClassesRoot \ Typelib和;
  • 中的所有子项值
  • 如何在子项值数组中找到已知值(路径/ dll名称)的匹配项。

作为背景信息,我试图找到一种方法来检查DLL是否已注册。有人提到检查DLL的ClassesRoot \ Typelib是一种方法,因为我知道DLL的目录位置和名称,但没有别的。

有没有人有任何提示?欢呼声。

2 个答案:

答案 0 :(得分:2)

我没有对它进行过广泛的测试,它的错误处理代码非常少,但这可以帮助你开始。

public static bool IsRegistered(string name, string dllPath)
{
    RegistryKey typeLibKey = Registry.ClassesRoot.OpenSubKey("TypeLib");
    foreach (string libIdKeyName in typeLibKey.GetSubKeyNames())
    {
        RegistryKey libIdKey = typeLibKey.OpenSubKey(libIdKeyName);
        foreach (string versionKeyName in libIdKey.GetSubKeyNames())
        {
            RegistryKey versionKey = libIdKey.OpenSubKey(versionKeyName);
            string regName = (string)versionKey.GetValue("");
            if (regName == name)
            {
                foreach (string itterKeyName in versionKey.GetSubKeyNames())
                {
                    int throwawayint;
                    if (int.TryParse(itterKeyName, out throwawayint))
                    {
                        RegistryKey itterKey = versionKey.OpenSubKey(itterKeyName);
                        string regDllPath = (string)itterKey.OpenSubKey("win32").GetValue("");
                        if (regDllPath == dllPath)
                        {
                            return true;
                        }
                    }
                }
            }
        }
    }

    return false;
}

}

答案 1 :(得分:1)

查看Microsoft.Win32.Registry和Microsoft.Win32.RegistryKey。

public void Foo()
{
   foreach (string s in Microsoft.Win32.Registry.CurrentUser.GetSubKeyNames())
   {
      Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(s);
      // check here for the dll value and exit if found
      // recurse down the tree...
   }
}