regsvr32 有什么作用?

regsvr32 有什么作用?

要在 Windows 服务器上使用注册 DLL 文件regsvr32,您是否先需要将文件移动到您的system32文件夹中,或者这是否在您调用命令后自动完成regsvr32

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

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

答案1

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

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

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

HKLM\SOFTWARE\Classes\DAO.TableDef.36

对于 DAO 表定义对象,Key 的名称是程序员在其代码中引用的 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 后不要移动它。

答案2

RegSvr32 调用导出的方法动态注册服务器在 DLL 中。接下来具体发生什么取决于实现。通常,COM 的注册表项是根据文件位置编写的。一般来说,注册不应被视为安装程序,它的作用远不止于此。

除非该应用程序有特殊功能,否则可以在任何地方注册它,但此后您不应移动/删除它。 SysInternal 的 SysMon如果您确实想查看详细信息,则可以在调用注册时监视文件和注册表访问 - 尽管没有什么可以阻止代码执行任何操作,或者代码可以执行的任何操作,例如访问互联网、写入或删除其他文件等。与任何可执行文件一样,只注册您信任的代码。

还有DLL安装可以这样调用regsvr32 /i它,根据regsvr32 文档

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

还有取消注册服务器,但从实际经验来看,这种实现的质量通常比注册的要低。

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

相关内容