2010-02-17 289 views
11

我想创建一个小应用程序来添加和删除注册表中的用户定义的上下文菜单项。为了做到这一点,我需要获得一个任意DLL的CLSID,这样我可以在写入新的之前备份以前的条目。获取DLL文件的CLSID?

虽然regsrv32设法创造这个神奇的号码,我没有找到任何方法让我自己得到这个号码。

我希望有一些东西比这更好的:对于DLL名称

  1. 扫描注册表
  2. 如果没有找到,登记,再次扫描,然后注销再次

如果该DLL已被重命名,我可以看到问题的可能性。

回答

4

你可以考虑在指定REGKIND_NONE的DLL上调用LoadTypeLibEx,然后检查通过ITypeLib接口获得的TypeLibInfo信息。

MSDN上有这方面的一些信息。这是一个以VB6为基础的旧链接,但具有以这种方式检查COM组件的有用信息。

2

你可以尝试使用RegOverridePredefKey()拦截的确注册表什么REGSVR32 - 调用RegOverridePredefKey(),然后复制所做REGSVR32 - 调用LoadLibrary()的COM服务器,调用中的DllRegisterServer() - 然后检查完​​成的改变。使用RegOverridePredefKey(),您将隔离更改并且不让它们变为持久性。