Получение CLSID для файла DLL? - PullRequest
11 голосов
/ 17 февраля 2010

Я хочу создать небольшое приложение для добавления и удаления определенных пользователем записей контекстного меню из реестра. Чтобы сделать это, каким-то образом мне нужно получить CLSID произвольной библиотеки DLL, чтобы я мог создать резервные копии предыдущих записей, если они существуют, прежде чем писать новые.

Хотя regsrv32 каким-то образом удается создать это магическое число, я сам не нашел способа получить это число.

Я надеюсь, что есть что-то лучшее, чем это:

  1. сканирование реестра на имя DLL
  2. если не найден, зарегистрируйте его, отсканируйте и снова отмените регистрацию

Если DLL была переименована, я вижу возможность возникновения проблем.

Ответы [ 2 ]

4 голосов
/ 17 февраля 2010

Вы могли бы подумать о том, чтобы вызвать LoadTypeLibEx в DLL с указанием REGKIND_NONE, а затем проверить получение информации TypeLibInfo , доступной через интерфейс ITypeLib , возвращенной вам.

Есть некоторая информация о подобных вещах на MSDN . Это старая ссылка, ориентированная на VB6, но содержащая полезную информацию о проверке компонентов COM таким образом.

2 голосов
/ 17 февраля 2010

Вы можете попробовать использовать RegOverridePredefKey () для перехвата того, что regsvr32 делает с реестром - вызовите RegOverridePredefKey (), затем воспроизвести то, что regsvr32 делает - LoadLibrary () COM-сервер, вызвать DllRegisterServer () - затем проверить сделанные изменения. С RegOverridePredefKey () вы изолируете изменения и не дадите им стать постоянными.

...