RegSvr32 没有为 COM 对象创建注册表项

Posted

技术标签:

【中文标题】RegSvr32 没有为 COM 对象创建注册表项【英文标题】:RegSvr32 not making registry entries for COM object 【发布时间】:2014-03-31 04:16:36 【问题描述】:

我在现有 ATL COM 项目中有一个新创建的 ATL 简单对象。 现在,使用 regsvr32 注册这个 DLL 就可以了。我收到一条消息说 DLL 注册成功。但是,它未能在 HKCR 下进行条目。我可以看到除此之外的所有其他对象的条目。

我正在使用VS2012 Professional编译我的项目,配置类型是x64。 ** 我最近将我的解决方案从 VS2005 升级到 VS2012,这是我在新创建的解决方案下的第一个对象。 **

任何人都可以在这里指出正确的方向吗?

【问题讨论】:

开启 UAC。 regsvr32 是否显示 UAC 提示?如果不是,则意味着注册是虚拟化的,并且条目实际上是在 HKCU 的某个地方。 @Medinoc:UAC 已开启。我以管理员身份运行 cmd.exe,然后使用绝对路径运行 regsvr32:C:\Windows\System32\regsvr32.exe DLLName.dll 你在 Wow6432Node 下检查过吗? 很多可能的解释。通过首先查看实际上正在写入的键来诊断这一点。使用 SysInternals 的 Process Monitor,您会看到 regsvr32 写入密钥。 也许您只需要指定您要查找的密钥以及项目中的哪些 ATL/C++ 代码让您认为这些密钥应该存在。 【参考方案1】:

好的,即使我的命令提示符目录与我使用命令时要注册的DLL所在的目录相同 - C:\windows\system32\regsvr32.exe DLLname.dll,它正在注册DLL 位于 System 32 文件夹中。

使用 DLL 的绝对路径注册了正确的 DLL,并且新的 progID 出现在 HKCR 中。

【讨论】:

以上是关于RegSvr32 没有为 COM 对象创建注册表项的主要内容,如果未能解决你的问题,请参考以下文章

如何创建可以注册到 regsvr32 的库?

RegSvr32.exe 无法启动

COM技术入门

无法使用 regsvr32 注册我的 DLL,但可以通过 IDE 工作

█c# 为啥有的dll不能直接引用,必须regsvr32 注册后 才能引用?

如何在没有regsvr32的情况下注册glut32.dll?