从exe中检索COM ProgID而不注册它

背景:

我想从VB6应用程序中提取COM数据,以便我可以正确地注册它(根据Microsoft最佳实践)应用程序。 我正在使用WiX 3.0并且heat.exe不会提取数据(已知的热量问题),我没有准备好访问相关的TLB文件。 VB6应用程序没有打开兼容性,因此它会在每次构建时重新生成COM GUID(他们希望应用程序能够与旧版本并行运行。)

我创建了一个C#应用程序,它将从VB6应用程序收集TypeLib,接口和CoClass信息,而无需注册它并创建一个wxs文件供蜡烛使用。 我的公司有其他几个这样的旧应用程序,我想使它成为一个更通用的解决方案。

问题:

1.有没有办法从项目或TLB文件中的应用程序中收集“真正的”ProgID(程序员预期的)并且没有注册它?

2.有没有办法在没有注册的情况下从DLL中找出预期的线程模型? (我打算它可以处理所有COM活动项,也可以完成)谢谢。

是的,不是。

据我所知,没有通用的方法可以从类型库或COM服务器中获取ProgID。

DLL的入口点是DllRegisterServer ,它应该将注册信息写入注册表,对于EXE服务器,它们通常具有一个具有相同含义的命令行参数。

类型库碰巧包含组件中所有接口和coclass的描述,但它们很少包含人类可读的ProgID。

我能看到并建议的唯一明确方法是覆盖HKCR \ CLSID键暂时指向某处,然后调用DllRegisterServer 。 由于注册表项覆盖是进程本地的,因此仅适用于进程内(DLL)服务器。

有关覆盖注册表项的信息,请参阅http://msdn.microsoft.com/en-us/library/ms724901(v=VS.85).aspx 。

然后检查临时注册表并查看所做的更改,例如CLSID < - > ProgID映射,线程模型等。