Я хочу создать небольшое приложение, чтобы добавить и удалить записи меню пользовательского контекста из реестра. Для создания этого так или иначе я должен получить CLSID произвольного DLL, таким образом, я могу создать резервную копию предыдущих записей, если они существуют прежде, чем записать новые.
Хотя regsrv32
так или иначе умеет создать это волшебное число, я не нашел способа получить то число сам.
Я надеюсь, что существует что-то лучше, чем это:
Если DLL был переименован, я вижу возможность для проблем.
Вы можете рассмотреть возможность вызова LoadTypeLibEx для библиотеки DLL с указанием REGKIND_NONE, а затем проверить, получить информацию TypeLibInfo , доступную через ITypeLib интерфейс передан вам обратно.
Информация об этом есть на MSDN . Это старая ссылка, ориентированная на VB6, но она содержит полезную информацию о проверке COM-компонентов таким способом.
Вы можете попробовать использовать RegOverridePredefKey () , чтобы перехватить то, что regsvr32 делает с реестром - вызовите RegOverridePredefKey (), затем воспроизведите то, что делает regsvr32 - LoadLibrary () COM-сервер, вызовите DllRegisterServer () - затем проверить сделанные изменения. С помощью RegOverridePredefKey () вы изолируете изменения и не позволите им стать постоянными.