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


101

我尝试使用以下代码:

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

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


看到这个问题被标记为“ vb.net”,我想知道为什么您要注册在VB.NET中创建的DLL。要与之配合使用regsvr32,DLL必须导出函数DllRegisterServerDllUnregisterServer。根本没有注册您创建的绝大多数DLL。
科迪·格雷

12
您的意思是不起作用或无用?您是否收到错误消息?它说什么?
科迪·格雷

Answers:


68

键入regsvr32 name.dll命令提示符(在提升模式下执行!),然后按“ Enter”。请注意,name.dll应将其替换为要注册的DLL的名称。例如,如果要注册iexplore.dll,请键入regsvr32 iexplore.dll


5
regsvr32 具有文件名和扩展名的.dll文件的路径,然后按Enter键
RK Sharma

202

好吧,您没有指定它是32位还是64位dll,并且没有包含错误消息,但是我想这与此知识库文章中描述的问题相同:运行Regsvr32.exe时出现错误消息在64位Windows上

引用那篇文章:

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

该文章的解决方案:

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


13
为什么这不是选定的答案?
Mike Devenney 2014年

5
这确实应该是正确的答案。我可以理解,在他的原始帖子中语法不正确,但是Rajkumar评论说,即使使用正确的语法,他也收到一条错误消息。对于搜索某人的人来说,这需要两个步骤,而不是一个。首先选择正确的答案,然后按照评论链进行操作,最终显示在该帖子上。
罗布

102

如果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。


26
+1表示“我知道这似乎是错误的方法,但这就是它的工作方式”,其中包含指向support.microsoft.com的链接。
Trevor Boyd Smith

6
“在高架cmd中”非常重要!
shindigo 2014年

4
我认为我们不必将其复制到system32或syswow64文件夹。只需注册文件即可。
Nikos

30

在x64系统上,system32用于64位,而syswow64用于32位(这与另一个答案中所述的相反)。WOW(Windows上的Windows)是在64位子系统下运行的32位子系统。

从名称上来讲,这是一团糟,并且只能使人迷惑,但这就是事实。

再次...

syswow64是32位,而不是64位。

system32是64位,而不是32位。

每个目录中都有一个regsrv32。一个是64位,另一个是32位。与odbcad32等人的处理相同。(如果要查看32位ODBC驱动程序,该驱动程序不会在system32的默认odbcad32(64位)中显示。)


1
为什么这有关系?regsvr32将注意细节,从理论上讲,它将检测您是注册32位还是64位DLL:stackoverflow.com/questions/18935163/…–
Sk8erPeter

8

打开开始菜单,然后在搜索框中输入cmd按住Ctrl + Shift并按Enter

这将在管理员模式下运行命令提示符。

现在输入: regsvr32 MyComobject.dll


6

最后我发现解决方案只是以管理员身份运行CMD然后编写

cd \windows\syswow64

然后写这个

regsvr32 c:\filename.dll

希望这个答案对您有帮助


如果已经将filename.dll复制到syswow64文件夹,并且在命令提示符下将工作目录更改为syswow64,则“ regsvr32 c:\ filename.dll”中的“ c:\”不是必需的。简而言之,“ regsvr32 c:\ filename.dll”应显示为“ regsvr32 filename.dll”
Josh McKearin 2013年

6

如果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

6

这里的一切都失败了,是错误的道路。然后我想起了旧Win95时代的一个技巧。打开.dll所在的程序文件夹,打开C:/ Windows / System32向下滚动到regsvr32并将dll从程序文件夹拖放到rgsrver32上。繁荣,完成。


2
这可行,但是如果您需要以管理员身份运行,可能会出现问题。
workabyte 2014年

3

知道错误消息将非常有价值。它旨在提供信息,即使它对您没有任何意义,但对我们却没有任何意义。被迫猜测,我想说的是DLL是32位DirectX过滤器。在这种情况下,应该采取适当的措施:

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

这必须在提升权限的命令提示符下运行,以使UAC无法停止所需的注册表访问。在superuser.com上询问有关此问题的更多问题


3

我刚刚测试了这个非常简单的方法,并且效果很好—但是我使用了内置的Administrator帐户,因此不必为了提高特权而无所不用其极。

以下批处理文件使用户无需将文件移入/移出系统文件夹。它还将留给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文件拖放到批处理文件的顶部即可。

  • 如果UAC没有给您机会以管理员身份运行批处理文件,则可能需要手动提升特权(说明适用于Windows 7):

    1. 右键单击批处理文件;
    2. 选择Create shortcut;
    3. 右键单击快捷方式;
    4. 选择Properties;
    5. 点击Compatibility标签;
    6. 选中标记的框Run this program as administrator;
    7. 将您的-.dll-.ax文件拖放到新快捷方式的顶部,而不是批处理文件。

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

不必担心之前的操作在系统文件夹(C:\Windows\System32 )中创建的副本C:\Windows\SysWOW64-每次运行批处理文件时它们都会被覆盖。

除非您运行了错误的批处理文件否则在运行正确的批处理文件之前,您可能需要删除复制到错误的系统文件夹(C:\Windows\System32 C:\Windows\SysWOW64的副本,...或...

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

    1. 从正确的批处理文件复制系统文件夹路径
      • 如果是64位: C:\Windows\System32
      • 如果是32位: C:\Windows\SysWOW64
    2. 将其粘贴到下一行,使其在前面 %nx1
      • 如果是64位: regsvr32 "C:\Windows\System32\%nx1"
      • 如果是32位: regsvr32 "C:\Windows\SysWOW64\%nx1"
        • 将路径粘贴在引号内
        • 插入反斜杠以与%nx1系统文件夹路径分开
      • ...

  • 运行此shot弹枪批处理文件,它将(按顺序):

    1. 执行中止的注册过程的清理
      • 撤消您的库文件完成的所有注册过程;
      • 删除已保存到任一系统文件夹的库文件的任何副本;
      • 暂停以允许您在此时终止批处理文件(并根据需要运行另一个文件)。
    2. 在您的库文件上尝试64位安装
      • 将您的库文件复制到C:\Windows\System32;
      • 将您的库文件注册为64位进程;
      • 暂停以允许您在此时终止批处理文件。
    3. 撤消64位安装
      • 将您的库文件的所有注册撤消为64位进程;
      • 从中删除您的库文件C:\Windows\System32
      • 暂停以允许您在此时终止批处理文件(并根据需要运行另一个文件)。
    4. 尝试对库文件进行32位安装
      • 将您的库文件复制到 C:\Windows\SystemWOW64
      • 将您的库文件注册为32位进程;
      • 暂停以允许您在此时终止批处理文件。
    5. 删除未注册的原始库文件副本

Run as administrator当我为bat文件创建快捷方式时,该按钮显示为灰色。我以管理员身份登录。另外,%nx1还是%n1
乔恩·格拉

3

Windows 7中存在差异。以管理员身份登录不会给予同等的权利运行的程序作为管理员时。

转到开始-所有程序-附件。右键单击“命令”窗口,然后选择“以管理员身份运行”,现在通常通过以下方式注册dll:regsrvr32 xxx.dll



3

您需要cmd.exec:\windows\system32\ by administrator

命令: 对于注销 * .dll文件

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

用于注册 * .dll文件

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

2

关于regsvr32的部分困惑在于,在64位Windows上,名称和路径没有更改,但是现在它注册了64位DLL。SysWOW64中存在32位regsvr32,该名称似乎代表64位应用程序。但是,名称中的WOW64指的是Windows 64上的Windows,或更确切地说是Windows 64位上的Windows 32位。当您以这种方式考虑时,即使在这种情况下它令人困惑,该名称还是有意义的。

我无法在MSDN博客上找到原始资源,但此Wikipedia文章http://en.wikipedia.org/wiki/WoW64引用了该原始资源。


1

这是我在Win7 x64计算机上解决此问题的方法:

1-错误消息:

“ CoCreateInstance()失败,请检查您的注册表项CLSID {F088EA74-2E87-11D3-B1F3-00C0F03C37D3},并确保您以管理员身份登录”

2-修复程序:

  • 启动/键入cmd / RightMouse单击cmd.exe,然后选择“以管理员身份运行”
  • 输入: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,然后再次营业!

希望这可以帮助 !

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.