COM注册如何在Windows中运行

Air*_*nji 7 windows com registry

我是一个应用程序打包器,试图弄清楚COM注册表项(SelfReg)如何与Windows中的给定.dll相互关联.

ProgID,AppID,TypeLibs,Extensions和Verbs都与CLSID有关吗?CLSID总是使用Prog/App ID,还是只有文件扩展类?哪些位是可选的?

其中一些似乎是"像路由器",其中有两个接口(内部 - .dll)和外部(扩展等).

这一切都适合吗?(SDK文档对我没有意义)

我问,因为这对于使用Windows Installer的应用程序"愈合"来说都是至关重要的(这些打包器都是'大',但是因为它真的是编码器,所以没有任何实质性的故障)

---编辑:我是否可以安全地假设COM注册了什么,它必须全部链接回CLSID并且不能是'死胡同'?动词需要扩展,需要progid的...

AppId,TypeLibs和Interfaces怎么样?它们如何相互关联?

Tob*_*len 5

首先要意识到的是,COM dll会自行注册。他们会将所有必需的条目放入注册表中的正确位置。

我认为,关于哪些位是可选的,您的中心问题的答案可能是它们对于不同类型的对象都是可选的。如果自动化对象是可公共创建的,则它们需要Prog / AppID,但如果仅在内部创建,则可能不需要Prog / AppID,类似地,可以列出一个不可公共创建的COM类。

许多不具有自动化接口的COM对象(例如microsoft在Windows内部内部使用的许多COM类将没有任何ProgId,而仅在HKCR \ CLSID的CLSID下具有一个条目。

如果我对您的理解正确,那么您将从安装程序的角度对此感兴趣。我可以想象,您需要做的就是要求用户指定哪些dll正在自动注册,然后调用

regsvr32 dllname.dll

要么

exename.exe / Regserver

用于进程外服务器。如果出现问题,您只需要打相反的话。

regsvr32 / u dllname.dll

要么

exename.exe / Unregserver

我希望这能回答您的问题。