如何在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位的:
- 将DLL复制到C:\ Windows \ SysWoW64 \
- 在提升的cmd中:%windir%\ SysWoW64 \ regsvr32.exe%windir%\ SysWoW64 \ namedll.dll
如果DLL是64位的:
- 将DLL复制到C:\ Windows \ System32 \
- 在提升的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):
- 用鼠标右键单击该batch file;
- select
Create shortcut
- 右键单击快捷方式;
- select
Properties
; - 单击
Compatibility
选项卡; - 选中“
Run this program as administrator
”框。 - 将您的
-.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正确的库文件进行注册。
- 从正确的batch file复制系统文件夹path
- 如果64位:
C:\Windows\System32
- 如果是32位:
C:\Windows\SysWOW64
- 如果64位:
- 将它粘贴到下一行,以便它在
%nx1
之前- 如果64位:
regsvr32 "C:\Windows\System32\%nx1"
- 如果32位:
regsvr32 "C:\Windows\SysWOW64\%nx1"
- 在引号内粘贴path
- 插入反斜杠以从系统文件夹path中分隔
%nx1
- 或 …
- 如果64位:
- 从正确的batch file复制系统文件夹path
-
运行这个霰弹枪batch file,它将(按顺序):
- 执行中止注册过程的清理
- 反转您的图书馆文件完成的任何注册过程;
- 删除已保存到系统文件夹中的任何库文件副本;
- 暂停以允许您在此处终止batch file(如果您愿意,可以运行另一个文件)。
- 在库文件上尝试64位安装
- 将你的库文件复制到
C:\Windows\System32
; - 将库文件注册为64位进程;
- 暂停以允许您在此时终止batch file。
- 将你的库文件复制到
- 撤消64位安装
- 将你的库文件注册为64位进程;
- 从
C:\Windows\System32
删除您的库文件; - 暂停以允许您在此处终止batch file(如果您愿意,可以运行另一个文件)。
- 在库文件上尝试32位安装
- 将您的库文件复制到
C:\Windows\SystemWOW64
- 将您的库文件注册为32位进程;
- 暂停以允许您在此时终止batch file。
- 将您的库文件复制到
- 删除原始,未注册的库文件副本
- 执行中止注册过程的清理
在Windows 7中有所不同。以pipe理员身份login时,与以pipe理员身份运行程序时的权限不同。
转到开始 – 所有程序 – 配件。 右键单击命令窗口并select“以pipe理员身份运行”现在通常通过regsrvr32 xxx.dll注册dll
在执行此操作时,如果得到错误代码0x80040201,请尝试DllRegisterServer中的解决scheme失败,并显示错误代码0x80040201 ,但请确保以“以pipe理员身份运行”打开命令提示符。
您需要c:\windows\system32\ by administrator
在c:\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并重新开始业务!
希望这可以帮助 !