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 注册我的 DLL,但可以通过 IDE 工作