AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 835433
Accepted
bvdb
bvdb
Asked: 2017-03-01 06:56:51 +0800 CST2017-03-01 06:56:51 +0800 CST 2017-03-01 06:56:51 +0800 CST

regsvr32 有什么作用?

  • 772

要使用 . 在 Windows 服务器上注册 DLL 文件regsvr32,您首先需要将文件移动到您的system32文件夹,还是在您调用regsvr32命令后实际上自动完成?

如果我只是将一个dll文件放在我的桌面上并在那里注册,我可以在注册后将其删除吗?删除后会发生什么?

换句话说,regsvr 实际上是如何工作的?

windows deployment dll com
  • 2 2 个回答
  • 6915 Views

2 个回答

  • Voted
  1. Matthew Wetmore
    2017-03-01T07:36:03+08:002017-03-01T07:36:03+08:00

    RegSvr32 调用 DLL 中的导出方法DllRegisterServer。接下来具体发生的事情取决于实施。通常,COM 的注册表项是根据文件位置编写的。通常,注册不应被视为超出此范围的安装程序。

    除非应用程序有特定内容,否则可以从任何地方注册它,但之后您不应移动/删除它。 如果您真的想查看详细信息, SysInternal 的 SysMon可以在您调用注册时监视文件和注册表访问 - 尽管没有什么可以阻止代码不做任何事情或代码可以做的任何事情,例如访问互联网、写入或删除其他文件等等. 像任何可执行文件一样,只注册您信任的代码。

    还有可以调用的DllInstall ,根据regsvr32 文档regsvr32 /i,它是一个安装程序:

    Regsvr32
    此命令行工具将 .dll 文件注册为注册表中的命令组件。
    语法
    regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname
    参数
    /u :注销服务器。
    /s :指定 regsvr32 静默运行并且不显示任何消息框。
    /n :指定不调用 DllRegisterServer。您必须将此选项与 /i 一起使用。
    /i :cmdline :调用 DllInstall 并传递一个可选的 [cmdline]。当与 /u 一起使用时,它会调用 dll 卸载。
    dllname :指定将要注册的 dll 文件的名称。
    /? :在命令提示符处显示帮助。

    还有DllUnregisterServer,但从实际经验来看,它的实现通常比注册质量低。

    Windows Installer (MSI) 的目标之一是将安装与这样的代码分离。

    • 10
  2. Best Answer
    Peter Hahndorf
    2017-03-01T22:15:04+08:002017-03-01T22:15:04+08:00

    除了@Matthew Wetmore 的正确答案之外,通常发生的事情是它在该 dll 中注册了所有 COM 组件。

    具体来说,它会在 Windows 注册表中创建两个键(+子键)。

    例如考虑一个 dll: dao360.dll,它里面有多个 COM 对象。对于每个第一个键是这样的:

    HKLM\SOFTWARE\Classes\DAO.TableDef.36

    对于 DAO 表定义对象,键的名称是程序员将在其代码中引用的 COM 对象的 ProgID。

    键下通常是具有默认值的单个键:

    HKLM\SOFTWARE\Classes\DAO.TableDef.36\CLSID

    在这种情况下:

    {00000103-0000-0010-8000-00AA006D2EA4}

    这是 COM 对象的 Class ID 或 CLSID,它告诉我们第二个键的位置:

    HKLM\SOFTWARE\Classes\CLSID{00000103-0000-0010-8000-00AA006D2EA4}

    此键及其子键和值具有有关 COM 对象的附加信息。

    需要注意的一个值是以下默认值:

    HKLM\SOFTWARE\Classes\Wow6432Node\CLSID{00000103-0000-0010-8000-00AA006D2EA4}\InprocServer32

    它具有承载 COM 对象的 exe/dll 的文件路径,在我们的示例中:

    %CommonProgramFiles%\Microsoft Shared\DAO\dao360.dll

    这是使用 regsvr32.exe 注册此 COM 对象时的正确文件路径。如果您手动移动文件,COM 对象将不再工作,因为此注册表值现在引用了一个丢失的文件。

    因此,在 DLL 上使用 regsvr32.exe 之前,请将其移动到其最终位置,并且在注册 DLL 后不要移动它。

    • 5

相关问题

  • 知道任何适用于 Windows 的快速可编写脚本的 ftp 客户端吗?[关闭]

  • 如果 Windows 服务崩溃,如何自动重新启动它?

  • 无法安排任务(访问被拒绝)

  • 物理机重启时自动重启虚拟机(VMWare)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve