我正在尝试在 Windows Server 2008 R2 上注册 COM DLL 文件。以下是我采取的步骤:
- Run
cmd
作为管理员
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 服务器自行注册。
What that代码的作用是相当难以猜测的。然而,从错误代码中您得到的诊断结果是不言而喻的,由于某种原因,该 COM 服务器需要先注册另一个 COM 服务器。错误消息很糟糕,它没有告诉你what它需要的其他服务器。 COM 错误处理方式的一个令人悲伤的副作用。
要解决此问题,请使用 SysInternals 的 ProcMon 工具。它向您显示 Regsvr32.exe(实际上:COM 服务器)打开哪些注册表项来查找服务器。查找对 CLSID 密钥的访问。这会提示您它正在寻找什么 {guid}。这仍然不能完全告诉您服务器 DLL,您应该将跟踪与从工作机器获得的跟踪进行比较。 InprocServer32 键具有 DLL 路径。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)