若要使用regsvr32在windows服务器上注册DLL文件,首先需要将该文件移动到system32文件夹中,还是在调用regsvr32命令后自动完成?
如果我只是把一个dll文件放在我的桌面上并在那里注册,我可以在注册后删除它吗?移除后会发生什么?
换句话说,regsvr实际上是如何工作的?
发布于 2017-03-01 06:15:04
除了@Matthew的正确答案之外,通常发生的事情是,它在dll中注册了所有COM组件。
具体来说,它在Windows注册表中创建两个键(+子项)。
例如,考虑一个dll:dao360.dll,其中包含多个COM对象。对于每个键,第一个键如下所示:
HKLM\软件\Classes\DAOT.ableDef.36
对于DAO表定义对象,键名是程序员在代码中引用的COM对象的ProgID。
键下通常是一个具有默认值的单一键:
HKLM\软件\Classes\DAOT.ableDef.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。
发布于 2017-02-28 15:36:03
RegSvr32在DLL中调用导出的方法DllRegisterServer。接下来具体发生的事情取决于实现。通常,COM的注册表项是根据文件位置编写的。一般情况下,注册不应被认为是一个安装程序,远远超过这一点。
除非有一些特定的应用程序,它可以在任何地方注册,但你不应该移动/删除它之后。如果您真的想查看详细信息,( SysMon )赛斯内(氏)可以在调用注册时监视文件和注册表的访问--尽管没有什么可以阻止代码做任何事情,或者代码可以做的任何事情,比如访问互联网、编写或删除其他文件等等。与任何可执行文件一样,只注册您信任的代码。
也可以用DllInstall调用regsvr32 /i,根据regsvr32 32文档,这意味着它是一个安装程序:
regsvr32 这个命令行工具在registry. Syntax regsvr32 /u /n/i*厘米线] dllname Parameters /u中将.dll文件注册为命令组件:UnRegistryserver. /s :指定Regsvr32以静默方式运行,并且不显示任何消息boxes. regsvr32:指定不调用/u。必须在/i. /i :cmdline : DllInstall中使用此选项,将其传递为可选的厘米线。当与/u一起使用时,它调用dll uninstall. dllname :指定dll文件的名称,该文件将是registered. /?:在命令提示符下显示帮助。
也有DllUnregisterServerDllUnregisterServer,但从实际经验来看,这种实现的质量通常低于注册。
Windows (MSI)的目标之一是将安装与这样的代码分离开来。
https://serverfault.com/questions/835433
复制相似问题