bvd*_*vdb 7 windows deployment dll com
要使用 . 在 Windows 服务器上注册 DLL 文件regsvr32,您是否首先需要将文件移动到您的system32文件夹中,还是调用regsvr32命令后实际上会自动完成?
如果我只是将一个dll文件放在桌面上并在那里注册,我可以在注册后删除它吗?去掉后会怎样?
换句话说,regsvr 实际上是如何工作的?
Mat*_*ore 10
RegSvr32 调用DLL 中的导出方法DllRegisterServer。接下来具体发生的事情取决于实施。通常,COM 的注册表项是根据文件位置编写的。通常,注册不应被视为超出此范围的安装程序。
除非有特定于应用程序的内容,否则它可以从任何地方注册,但之后您不应移动/删除它。 如果您真的想查看详细信息,SysInternal 的 SysMon可以在您调用注册时查看文件和注册表访问 - 尽管没有什么可以阻止代码不执行任何操作或实际上代码可以执行任何操作,例如访问 Internet、写入或删除其他文件等. 像任何可执行文件一样,只注册您信任的代码。
还有DllInstall可以调用,regsvr32 /i根据regsvr32 文档,它是一个安装程序:
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) 的目标之一是将安装与这样的代码分离。
除了@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 对象的类 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。