Найти соответствие в значениях подраздела - PullRequest
1 голос
/ 15 декабря 2008

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 15 декабря 2008

Я не тестировал его всесторонне, и у него очень мало кода для обработки ошибок, но это должно помочь вам начать.

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 голос
/ 15 декабря 2008

Посмотрите на 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...
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...