在Windows7上,regsvr32不会写入HKCR \ CLSID

时间:2011-03-04 16:04:28

标签: com windows-7 regsvr32

我使用ATL向导在Visual Studio 2008中创建了一个新的简单COM对象。该对象具有单个类和简单方法。 ATL向导确实为我的班级生成了.rgs个文件。

当我在我的XP机器上运行regsvr32 Simple.dll时,该类已注册,信息显示在HKCR\Simple.SimpleObjectHKCR\CLSID\{guid}中,正如我所料。

然而,在我的64位Windows 7机器上它并不相同。我以管理员身份运行regsvr32,显示HKCR\Simple.SimpleObject中的部分。但是HKCR\CLSID中的部分永远不会到达那里。因此我无法创建新实例。 (绝望的我已经在System32和SysWOW64中尝试了regsvr32,效果相同。)

为什么不regsrv32将数据放入HKCR\CLSID

3 个答案:

答案 0 :(得分:6)

HKCR是HKLM \ Software \ Classes的别名,但它并未显示所有内容。查看已注册的{guid}的HKLM \ Software \ Wow6432Node \ Classes \ CLSID。这是c:\ system32 \ syswow64 \ regsvr32.exe写入的地方。

你确实提到过你已经尝试过了。有一些问题,你不能随意运行任何版本的Regsvr32.exe并获得相同的DLL注册。无法在64位进程中加载​​32位DLL。换句话说,64位版本的Regsvr32.exe无法注册32位COM服务器。反过来说。为什么你没有收到错误消息是不可能从这里,只有理智的解释是你不知道实际上没有运行正确版本的Regsvr32。

要真正调试它,请使用SysInternals的ProcMon实用程序。它的跟踪向您展示了ATL注册商如何在注册表中编写密钥。

答案 1 :(得分:4)

32位应用程序和组件正被重定向到注册表的不同部分。如果您使用64位版本的regedit浏览注册表,则无法在您期望的位置找到它。

因此,您的组件应在HKEY_CLASSES_ROOT\Wow6432Node\CLSID中注册。

在此注册表路径中,它应对所有32位应用程序可见。

另见:

答案 2 :(得分:1)

我们在这里遇到了类似的问题,Regsvr32没有报告错误,但似乎没有任何内容写入注册表。

运行'作为管理员'似乎可以解决问题。