如何在Windows 7 64位上注册DLL文件?

我试图使用下面的代码:

cd c:\windows\system32 regsvr32.exe dllname.ax 

但这不适合我。 如何在Windows 7上使用64位处理器注册DLL文件?

键入regsvr32 name.dll到命令提示符(在提升模式下执行!)并按“Enter”。 请注意, name.dll应该replace为您要注册的DLL的名称。 例如,如果您要注册iexplore.dll,请键入regsvr32 iexplore.dll

那么,你没有指定它是一个32位或64位的DLL,你不包括错误信息,但我猜这是同一个问题,这个知识库文章中描述: 运行Regsvr32.exe时出现错误信息在64位Windows上

从那篇文章引用:

出现此问题的原因是System32文件夹中的Regsvr32.exe文件是一个64位版本。 当您运行Regsvr32注册一个DLL时,默认情况下使用64位版本。

该文章的解决scheme:

要解决此问题,请从%SystemRoot%\ Syswow64文件夹运行Regsvr32.exe。 例如对于键入以下命令注册该DLL: cd \windows\syswow64 regsvr32 c:\filename.dll

如果该DLL是32位的:

将DLL复制到C:\ Windows \ SysWoW64 \
提升的命令提示符下: %windir%\SysWoW64\regsvr32.exe %windir%\SysWoW64\namedll.dll

如果DLL是64位的:

将DLL复制到C:\ Windows \ System32 \
提升的命令提示符下: %windir%\System32\regsvr32.exe %windir%\System32\namedll.dll

我知道这似乎是错误的方式,但这是它的工作方式。 看到:

http://support.microsoft.com/kb/249873
Quote:“注意在Windows操作系统的64位版本,有两个版本的Regsv32.exe文件:
64位版本是%systemroot%\ System32 \ regsvr32.exe。
32位版本是%systemroot%\ SysWoW64 \ regsvr32.exe。

在x64系统上,system32是64位,而syswow64是32位(而不是另一个答案中所述的其他方式)。 WOW(Windows上的Windows)是在64位子系统下运行的32位子系统)。

这是一个混乱的命名术语,只是为了混淆,但事实就是这样。

再次…

syswow64是32位,不是64位。

system32是64位,不是32位。

每个目录中都有一个regsrv32。 一个是64位,另一个是32位。 这与odbcad32等的交易是一样的。 (如果您想查看32位ODBC驱动程序,这些驱动程序不会在64位系统32中使用默认odbcad32显示)。

打开开始菜单并在search框中inputcmd按住Ctrl + Shift并按Enter键

这将以pipe理员模式运行命令提示符。

现在键入: regsvr32 MyComobject.dll

如果该DLL是32位的:

  1. 将DLL复制到C:\ Windows \ SysWoW64 \
  2. 在提升的cmd中:%windir%\ SysWoW64 \ regsvr32.exe%windir%\ SysWoW64 \ namedll.dll

如果DLL是64位的:

  1. 将DLL复制到C:\ Windows \ System32 \
  2. 在提升的cmd中:%windir%\ System32 \ regsvr32.exe%windir%\ System32 \ namedll.dll

这里的一切都是错误的path。 然后我想起了Win95的旧日子里的一招。 打开.dll所在的程序文件夹,打开C:\ Windows \ System32,向下滚动到regsvr32,将dll从程序文件夹拖放到rgsrver32上。 热潮,完成。

最后,我发现解决scheme只是以pipe理员身份运行CMD,然后写入

 cd \windows\syswow64 

然后写这个

 regsvr32 c:\filename.dll 

我希望这个答案能帮助你

知道错误信息将是相当宝贵的。 它是为了提供信息,尽pipe它对我们没有任何意义。 被迫猜测,我会说这个DLL是一个32位的DirectXfilter。 在这种情况下,这应该是正确的行动:

 cd c:\windows\syswow64 move ..\system32\dllname.ax . regsvr32.exe dllname.ax 

这必须在提升的命令提示符下运行,以便UAC无法停止所需的registry访问。 在superuser.com上询问更多的问题

我只是testing了这个非常简单的方法 ,它完美的工作 – 但我使用内置的pipe理员帐户,所以我不必跳过箍提升特权。

以下batch file减轻了用户将文件移入/移出系统文件夹的需要。 它也让Windows适用于正确版本的Regsvr32

说明:

  • 在包含您要注册的库( -.dll-.ax )文件的文件夹中,打开一个新的文本文件并粘贴到下面的一个例程中:

     echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 64-BIT SYSTEMS copy %1 C:\Windows\System32 regsvr32 "%nx1" echo END BATCH FILE pause 
     echo BEGIN DRAG-AND-DROP %n1 REGISTRAR FOR 32-BIT SYSTEMS copy %1 C:\Windows\SysWOW64 regsvr32 "%nx1" echo END BATCH FILE pause 
  • 将新的文本文件保存为批处理( -.bat )文件; 然后只需将-.dll-.ax文件拖放到batch file的顶部即可。

  • 如果UAC不让您有机会以pipe理员身份运行batch file,则可能需要手动提升权限(说明适用于Windows 7):

    1. 用鼠标右键单击该batch file;
    2. selectCreate shortcut
    3. 右键单击快捷方式;
    4. selectProperties ;
    5. 单击Compatibility选项卡;
    6. 选中“ Run this program as administrator ”框。
    7. 将您的-.dll-.ax文件拖放到新的快捷方式而不是batch file的顶部。

就是这样 我select COPY 而不是 MOVE 来防止任何与UAC相关的后续尝试的失败。 删除原始库( -.dll -.ax )文件后 应成功注册

不要担心 以前的传递 给系统文件夹( C:\Windows\System32 C:\Windows\SysWOW64 )的 副本 – 每次运行batch file时都会覆盖它们。

除非你运行了错误的batch file否则在运行正确的batch file之前 ,你可能想删除拷贝到错误的系统文件夹( C:\Windows\System32 C:\Windows\SysWOW64要么…

  • 帮助Windows通过完全限定其目录位置来select正确的库文件进行注册。

    1. 从正确的batch file复制系统文件夹path
      • 如果64位: C:\Windows\System32
      • 如果是32位: C:\Windows\SysWOW64
    2. 将它粘贴到下一行,以便它在%nx1之前
      • 如果64位: regsvr32 "C:\Windows\System32\%nx1"
      • 如果32位: regsvr32 "C:\Windows\SysWOW64\%nx1"
        • 在引号内粘贴path
        • 插入反斜杠以从系统文件夹path中分隔%nx1
  • 运行这个霰弹枪batch file,它将(按顺序):

    1. 执行中止注册过程的清理
      • 反转您的图书馆文件完成的任何注册过程;
      • 删除已保存到系统文件夹中的任何库文件副本;
      • 暂停以允许您在此处终止batch file(如果您愿意,可以运行另一个文件)。
    2. 在库文件上尝试64位安装
      • 将你的库文件复制到C:\Windows\System32 ;
      • 将库文件注册为64位进程;
      • 暂停以允许您在此时终止batch file。
    3. 撤消64位安装
      • 将你的库文件注册为64位进程;
      • C:\Windows\System32删除您的库文件;
      • 暂停以允许您在此处终止batch file(如果您愿意,可以运行另一个文件)。
    4. 在库文件上尝试32位安装
      • 将您的库文件复制到C:\Windows\SystemWOW64
      • 将您的库文件注册为32位进程;
      • 暂停以允许您在此时终止batch file。
    5. 删除原始,未注册的库文件副本

在Windows 7中有所不同。以pipe理员身份login时,与以pipe理员身份运行程序时的权限不同。

转到开始 – 所有程序 – 配件。 右键单击命令窗口并select“以pipe理员身份运行”现在通常通过regsrvr32 xxx.dll注册dll

在执行此操作时,如果得到错误代码0x80040201,请尝试DllRegisterServer中的解决scheme失败,并显示错误代码0x80040201 ,但请确保以“以pipe理员身份运行”打开命令提示符。

您需要c:\windows\system32\ by administratorc:\windows\system32\ by administrator运行cmd.exe

命令: 用于取消注册 * .dll文件

regsvr32.exe /u C:\folder\folder\name.dll

用于注册 * .dll文件

 regsvr32.exe C:\folder\folder\name.dll 

部分关于regsvr32的混淆是,在64位窗口上,名称和path没有改变,但现在注册了64位DLL。 SysWOW64中存在32位regsvr32,这个名称似乎代表64位应用程序。 但名称中的WOW64指的是Windows 64上的Windows,或者更多的Windows 64位上的Windows 32位。 当你这样想起这个名字的时候,这个名字是有道理的,尽pipe在这种情况下它是令人困惑的。

我无法在MSDN博客上find我的原始资源,但在本维基百科文章中引用了它。http: //en.wikipedia.org/wiki/WoW64

下面是我在Win7 x64机器上解决这个问题的方法:

1 – 错误信息:

“CoCreateInstance()失败的Plkease检查您的registry项CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3},并确保您以pipe理员身份login”

2 – 修复程序:

  • 开始/在cmd.exe上键入cmd / RightMouseClick并select“以pipe理员身份运行”
  • 键入:regsvr32 / s C:\ Program Files \ Autodesk \ 3ds Max Design 2015 \ atl.dll regsvr32 / s C:\ Program Files \ Autodesk \ 3ds Max Design 2015 \ MAXComponents.dll
  • 重新启动Win 7并重新开始业务!

希望这可以帮助 !