COM dll注册时收到错误80004005



我有一个Delphi COM dll,它可以在几台机器上完美工作。然而,当我试图在一个Windows7盒子上注册它时,我得到了以下错误

DllRegisterServer failed with error code 0x80004005

我已经尝试了一些显而易见的解决方案,以确保注册正确的支持库。

我在这里找到的解决方案是将调用提升到regsvr32

以管理员身份运行CMD,然后从命令行调用regsvr32,解决了我眼前的问题,但没有找到主要的错误。

该错误代码是E_FAIL,它是通用COM错误代码。这意味着,出了问题,但我们不会比这更具体

那么,出了什么问题?你有COM服务器,而我们没有。所以你可以调试它来找出答案。在启用调试的情况下构建COM服务器,并调试RTL文件的DCU,因为您可能想要调试它们。

您需要调试响应注册的代码。这就是TComServer.UpdateRegistry方法。该代码反过来调用您声明的各种类工厂上的注册方法。失败可能是在您的注册代码或默认注册代码中。您需要调试注册代码的执行。通过使用regsvr32作为主机进程来完成此操作。在UpdateRegistry开始时设置一个断点,然后进行调试以找出问题所在

我可以看到,通过反复尝试,您发现您的COM服务器需要注册管理员权限,可能是因为它写入HKLM。考虑到你的问题,这些信息是不可能被辨别出来的。所以我写了这个通用的答案来展示如何调试和诊断这样一个通用的问题。