Найти соответствие в значениях подраздела

У меня проблемы со следующими двумя пунктами:

  • Как получить все значения подключа в ClassesRoot \ Typelib, и;
  • Как найти соответствие для известного значения (путь / имя DLL) в массиве значений подключа.

В качестве справочной информации я пытаюсь найти способ проверить, была ли зарегистрирована DLL. Кто-то упомянул, что проверка ClassesRoot \ Typelib для DLL была одним из способов сделать это, так как я знаю расположение каталога и имя DLL, но больше ничего.

У кого-нибудь есть советы? Приветствия.

15.12.2008 12:58:39
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;
}

}

2
15.12.2008 14:45:42

Посмотрите на 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...
   }
}
1
15.12.2008 13:43:52