我正在尝试在Windows Server 2008 R2上注册COM DLL文件。以下是我采取的步骤:
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
。有关此问题的详细信息,请使用错误代码作为搜索词进行在线搜索
答案 0 :(得分:26)
当DLL本身需要首先注册另一个COM服务器或者依赖于另一个不可用的DLL时,这就是你得到的错误。 Regsvr32.exe工具做得很少,它调用LoadLibrary()来加载在命令行参数中传递的DLL。然后GetProcAddress()在DLL中找到DllRegisterServer()入口点。并调用它将其留给COM服务器进行自我注册。
该代码所做的是相当不可行的。但是,您从错误代码中获得的诊断非常明显,由于某种原因,此COM服务器需要首先注册另一个。错误消息很糟糕,它没有告诉你它需要什么其他服务器。 COM错误处理方式的一个令人遗憾的副作用。
要解决此问题,请使用SysInternals的ProcMon工具。它显示了Regsvr32.exe(实际上是:COM服务器)正在打开以查找服务器的注册表项。查找对CLSID密钥的访问。这会让你暗示它正在寻找什么{guid}。这仍然不能告诉您服务器DLL,您应该将跟踪与从有效机器获得的跟踪进行比较。 InprocServer32密钥具有DLL路径。
答案 1 :(得分:5)
您可能需要使用32位版本的regsvr32.exe
注册此DLL:
c:\windows\syswow64\regsvr32 c:\tempdl\temp12.dll
答案 2 :(得分:3)
错误0x80040154是COM的REGDB_E_CLASSNOTREG,表示“未注册类”。基本上,COM类未在安装注册表中声明。
如果在尝试注册DLL时出现此错误,则此DLL的注册代码可能正在尝试实例化另一个 COM服务器(DLL或EXE),该服务器丢失或未丢失在此安装上注册。
如果您无法访问原始DLL源代码,我建议使用SysInternal的Process Monitor工具来跟踪COM注册表查找(使用更简单的RegMon工具,但它可能不再起作用)。
你应该在工作过程中放置一个过滤器(这里:Regsvr32.exe)来捕获有趣的东西。然后你应该在HKEY_CLASSES_ROOT \ [a progid,一个字符串]上查找失败的查询(例如,出现NAME_NOT_FOUND错误),或查询失败的HKEY_CLASSES_ROOT \ CLSID \ [guid]上的查询。
PS:不幸的是,在一个完美运行的Windows系统上可能有很多东西似乎失败了,所以你必须仔细研究所有错误。祝你好运: - )答案 3 :(得分:1)
答案 4 :(得分:1)
我在将activeX(OCX)注册到Windows Server 2008 R2时发现了类似的问题。为了解决这个问题,我使用了http://www.chestysoft.com/dllregsvr/default.asp工具。我的ocx存在一些依赖性问题所以我得到了“模块temp12。 dll无法加载。确保二进制文件存储在指定的路径或首次亮相以检查二进制或从属.DLL文件的问题。找不到指定的模块“错误消息。 当您尝试使用此工具注册OCX时,如果ocx具有依赖性或者您将获得成功消息,它将提示消息。我收到了mfc70.dll和msvcr70.dll依赖的消息。所以我将这些dll粘贴到C的system32文件夹中:\ windows及其完成。之后我成功注册了我的ocx。我在Windows Server 2008 R2 64bit机器上使用了32位版本的chestysoft工具(dllregsvr.exe)。
答案 5 :(得分:0)
答案 6 :(得分:0)
这是必须发生的事情。
您必须将要注册的DLL复制到: C:\ WINDOWS \ Syswow64资料\
然后在“运行”对话框中,键入以下内容:
C:\Windows\SysWOW64\regsvr32.exe c:\windows\system32\YourDLL.dll
您将收到消息:
c:\ windows \ system32 \ YourDLL.dll中的DllRegisterServer成功。
答案 7 :(得分:0)
您需要regsvr32的完整路径,以便%windir $ \ system32 \ regsvr32< * .dll>