在Windows Server 2008 R2上注册DLL文件

Bro*_*ink 21 windows dll windows-server-2000 windows-server-2008-r2

我正在尝试在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"
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

模块c:\tempdl\temp12.dll已加载,但调用DllRegisterServer失败,错误代码0x80040154.有关此问题的详细信息,请使用错误代码作为搜索词在线搜索

Han*_*ant 26

当DLL本身需要首先注册另一个COM服务器或者依赖于另一个不可用的DLL时,这就是你得到的错误.Regsvr32.exe工具做得很少,它调用LoadLibrary()来加载在命令行参数中传递的DLL.然后GetProcAddress()在DLL中找到DllRegisterServer()入口点.并调用它将其留给COM服务器进行自我注册.

什么代码确实是相当难以猜测.但是,您从错误代码中获得的诊断非常明显,由于某种原因,此COM服务器需要首先注册另一个.错误消息很糟糕,它不会告诉您它需要什么其他服务器.COM错误处理方式的一个令人遗憾的副作用.

要解决此问题,请使用SysInternals的ProcMon工具.它显示了Regsvr32.exe(实际上是:COM服务器)正在打开以查找服务器的注册表项.查找对CLSID密钥的访问.这会让你暗示它正在寻找什么{guid}.这仍然不能告诉您服务器DLL,您应该将跟踪与从有效机器获得的跟踪进行比较.InprocServer32密钥具有DLL路径.


Kev*_*Kev 5

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

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

  • 当DLL本身要求先注册另一个COM服务器时,将收到该错误。毫无疑问是什么DLL,您可以使用SysInternals的ProcMon实用程序来查看它在注册表中搜索CLSID项。与工作机器上的轨迹进行比较。 (2认同)