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


Answers

那么,你没有指定它是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

Question

我试图使用下面的代码:

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

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




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

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




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







我只是测试了这个非常简单的方法 ,它完美的工作 - 但我使用内置的管理员帐户,所以我不必跳过提高特权的箍环。

以下批处理文件可减轻用户将文件移入/移出系统文件夹的需求。 它也让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与系统文件夹路径分开
      • ...

  • 运行这个霰弹枪批处理文件,它将(按顺序):

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



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



在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显示)。




Links