在Windows Server 2008 R2上注册DLL文件

在Windows Server 2008 R2上注册DLL文件,windows,dll,windows-server-2008-r2,windows-server-2000,Windows,Dll,Windows Server 2008 R2,Windows Server 2000,我正在尝试在Windows Server 2008 R2上注册COM DLL文件。以下是我采取的步骤: 以管理员身份运行cmd c:\windows\system32\regsvr32.exe c:\tempdl\temp12.dll 当我执行该命令时,会出现以下错误: 未能加载模块temp12.dll。确保二进制文件存储在指定的路径中,或启动它以检查二进制文件或相关.DLL文件是否存在问题。找不到指定的模块 我能够在Windows2000上注册相同的DLL文件 我也试过了 c:\windows

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

  • 以管理员身份运行
    cmd
  • c:\windows\system32\regsvr32.exe c:\tempdl\temp12.dll
  • 当我执行该命令时,会出现以下错误:

    未能加载模块
    temp12.dll
    。确保二进制文件存储在指定的路径中,或启动它以检查二进制文件或相关
    .DLL
    文件是否存在问题。找不到指定的模块

    我能够在Windows2000上注册相同的DLL文件

    我也试过了

    c:\windows\syswow64\regsvr32 "c:\tempdl\temp12.dll"
    
    我得到了这个错误:

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


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


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

    如果COM对象使用ATL,则可能需要安装ATL,如本文所述:


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

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

    如果在尝试注册DLL时出现此错误,则此DLL的注册代码可能正试图实例化另一个在此安装中丢失或未注册的COM服务器(DLL或EXE)

    如果您无法访问原始DLL源代码,我建议您使用SysInternal的工具来跟踪COM注册表查找(以前有一个更简单的RegMon工具,但它可能不再有效)

    您应该在工作流程上设置一个过滤器(此处:Regsvr32.exe),以便只捕获感兴趣的内容。然后,您应该查找失败的HKEY_类\u根\[a,字符串](例如,名称为\u NOT_FOUND error),或者失败的HKEY_类\u根\ CLSID\[a guid]查询


    PS:不幸的是,在一个完美工作的Windows系统上,可能有很多东西似乎失败了,所以你必须仔细研究所有的错误。祝您好运:-)

    当DLL本身需要先注册另一个COM服务器或依赖于另一个不可用的DLL时,您会遇到此错误。Regsvr32.exe工具做的很少,它调用LoadLibrary()来加载在命令行参数中传递的DLL。然后GetProcAddress()在DLL中查找DllRegisterServer()入口点。并调用它,让COM服务器自行注册

    这段代码所做的是相当无用的。然而,从错误代码中,您得到的诊断是不言而喻的,出于某种原因,此COM服务器需要先注册另一个。错误消息很糟糕,它没有告诉您它需要什么其他服务器。COM错误处理方式的一个可悲的副作用

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

      <微软> VisualC++可再分发包可能没有安装在目标机器上(或者它有错误的版本)
    • 可能您没有使用Release config(而是使用Debug)构建.dll

      • 这是必须发生的事情

        您必须复制要注册到的DLL: c:\windows\SysWOW64\

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

        你会得到这样的信息:

        c:\windows\system32\YourDLL.dll中的DllRegisterServer成功


        在将activeX(OCX)注册到windows server 2008 R2时,我发现了类似的问题。为了解决这个问题,我使用了该工具。我的OCX存在一些依赖性问题,因此我得到了“未能加载模块temp12.dll。确保二进制文件存储在指定的路径上,或将其打开以检查二进制文件或相关.DLL文件是否存在问题。“找不到指定的模块”错误消息。
        当您尝试使用此工具注册OCX时,如果OCX存在依赖项,它将提示消息,或者您将收到成功消息。我收到了mfc70.dll和msvcr70.dll依赖项的消息。因此,我将这些dll粘贴到C:\windows的system32文件夹中,并完成了注册。之后,我成功注册了我的OCX。我使用了32位版本的chestysoft工具(dllregsvr.exe)在windows server 2008 R2 64位计算机上运行。

        您需要regsvr32的完整路径,因此%windir$\system32\regsvr32

        我也尝试过,但出现了此错误”已加载模块c:\tempdl\temp12.dll,但调用DllRegisterServer失败,错误代码为0x80040154。有关此问题的详细信息,请使用错误代码作为搜索词联机搜索“您是在具有提升权限的命令提示符下执行此操作的吗?是的,我在bat文件中有下面的脚本,并以管理员身份运行它。。由于cmd从c:\windows\system32 cd..cd syswow64 regsvr32”c:\tempdl\temp12.dll开始,因此类似的脚本如下所示”当DLL本身需要先注册另一个COM服务器时,您会遇到错误。这是不可使用的DLL,您可以使用SysInternals的ProcMon实用程序查看它在注册表中搜索CLSID项。与工作机器上的跟踪进行比较。如果答案是自己的,至少在Win7上,regsvr32足够聪明,可以如果DLL的位不匹配,则调用其自身的另一个版本,因此您不必担心这一点