我想创建一个小应用程序,以便从注册表中添加和删除用户定义的上下文菜单条目。为了做到这一点,我需要以某种方式获取任意DLL的CLSID,以便在写入新条目之前,如果它们存在,我可以备份它们。
虽然regsrv32
以某种方式设法创造了这个神奇的数字,但我没有找到任何方法来获取这个数字。
我希望有比这更好的东西:
如果已重命名DLL,我可能会发现问题的可能性。
答案 0 :(得分:4)
您可以考虑在指定REGKIND_NONE的DLL上调用LoadTypeLibEx,然后检查通过传递给您的TypeLibInfo接口获取ITypeLib信息。
MSDN上有关于此类事情的一些信息。它是一个旧的以VB6为中心的链接,但它提供了有关以这种方式检查COM组件的有用信息。
答案 1 :(得分:2)
您可以尝试使用RegOverridePredefKey()拦截regsvr32对注册表的作用 - 调用RegOverridePredefKey(),然后重现regsvr32的作用 - LoadLibrary()COM服务器,调用DllRegisterServer() - 然后检查完成的更改。使用RegOverridePredefKey(),您将隔离更改,而不是让它们变得持久。