我正在尝试在Windows Server 2008 R2上注册COM DLL文件。这是我采取的步骤:

  1. cmd 作为管理员
  2. c:\windows\system32\regsvr32.exe c:\tempdl\temp12.dll

当我执行该命令时,我会得到此错误:

模块 temp12.dll 无法加载。确保将二进制存储在指定的路径上或首次亮相以检查是否有二进制或依赖的问题 .DLL 文件。指定的模块无法找到。

我能够在Windows 2000上注册相同的DLL文件。

我也尝试了

c:\windows\syswow64\regsvr32 "c:\tempdl\temp12.dll"

我得到了这个错误:

模块 c:\tempdl\temp12.dll 被加载了,但呼吁 DllRegisterServer 错误代码失败 0x80040154. 。有关此问题的更多信息,请在线搜索错误代码作为搜索词

有帮助吗?

解决方案

这就是当DLL本身要求首先注册另一台COM服务器或对另一个不可用的DLL的依赖性时,您会遇到的错误。 REGSVR32.EXE工具的作用很少,它调用LoadLibrary()加载命令行参数中传递的DLL。然后getProcAddress()在dll中找到dllregisterserver()入口点。并称其为将其保留到COM服务器进行注册。

什么 代码确实是相当不可限制的。但是,从错误代码中,您得到的诊断是不言而喻的,由于某种原因,该com服务器需要首先注册的另一台服务器。错误消息很糟糕,它不会告诉你 什么 它需要的其他服务器。 COM错误处理方式的可悲副作用。

要解决此问题,请使用Sysinternals的Procmon工具。它向您显示了哪些注册表键regsvr32.exe(实际:com服务器)正在打开以查找服务器。寻找访问CLSID键。这给了您一个提示它正在寻找的{guid}。这仍然不太告诉您服务器DLL,您应该将跟踪与从有效的机器中获得的跟踪进行比较。 InProcServer32键具有DLL路径。

其他提示

您可能需要使用32位版本注册此DLL regsvr32.exe:

c:\windows\syswow64\regsvr32 c:\tempdl\temp12.dll

错误0x80040154是COM的REGDB_E_CLASSNOTREG,其意思是“未注册”。基本上,安装注册表中未声明COM类。

如果您在尝试注册DLL时会遇到此错误,则可能会尝试实例化此DLL的注册代码 其他 com服务器(DLL或EXE)在此安装上丢失或未注册。

如果您无法访问原始DLL源,我建议使用Sysinternal的 过程监视器 跟踪COM注册表查找的工具(使用更简单的regmon工具,但可能不再起作用)。

您应该在工作过程(此处:regsvr32.exe)上放置过滤器,以捕获有趣的内容。然后,您应该在hkey_classes_root [a上查找查询 progid, ,一个失败的字符串](例如,使用name_not_found错误),或在hkey_classes_root clsid [guid]上查询失败的字符串。

PS:不幸的是,在完美工作的Windows系统上似乎有很多事情似乎失败了,因此您必须仔细研究所有错误。祝你好运 :-)

我在Windows Server 2008 R2中注册ActiveX(OCX)时发现了类似的问题。 http://www.chestysoft.com/dllregsvr/default.asp 工具。我的OCX存在一些依赖性问题,因此我会得到“模块temp12.dll无法加载。确保二进制文件存储在指定的路径上或首次亮相,以检查是否有二进制或依赖性.dll文件的问题。找不到指定的模块“错误消息。当您尝试使用此工具注册OCX时,如果OCX具有依赖关系,或者您将获得成功消息。我收到了mfc70.dll和msvcr70.dll依赖项的消息。我将这些DLL粘贴到C的System32文件夹中。 : Windows及其完成。我成功注册了OCX。

如本KB文章所述,如果您的com对象使用ATL,则可能需要安装ATL:

http://support.microsoft.com/kb/201191

这些库可能必须由开发人员提供,以确保正确的版本。

这就是必须发生的事情。

您必须将要注册的dll复制到:c: windows syswow64

然后在运行对话框中,输入以下内容:C:\Windows\SysWOW64\regsvr32.exe c:\windows\system32\YourDLL.dll

您将收到消息:

c: Windows System32 YourDll.dll中的dllRegisterServer成功。

您需要通往regsvr32的完整路径,因此%windir $ system32 regsvr32 <*。dll>

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top