【问题标题】:What is difference between RegSvr and RegServer?RegSvr 和 RegServer 有什么区别?
【发布时间】:2010-06-16 08:47:36
【问题描述】:

/RegServer/RegSvr 是相同还是不同,如果不同,为什么/如何?

例如,我见过(来自 32 位操作系统的示例)这种风格:

RegSvr32 COM.exe

RegSvr32 COM.dll

或者作为替代方案(在 64 位操作系统上):

COM.exe /RegServer
COM.exe /RegSvr

这些不同的方法做同样的事情吗?

【问题讨论】:

  • 请记住,regsvr32 适用于 DLL 文件,但对于 exe 文件,您必须使用 /regserver 开关
  • 如何验证,COM组件注册成功?

标签: com registration


【解决方案1】:

COM 服务器在 32 位 64 位操作系统中的注册方式相同。问题与自我注册有关,这是注册 COM 服务器最直接的方法 - 通过要求服务器分别更新 HKLM/HKCR 注册表。

由于您无法直接运行 DLL,您可以使用帮助程序 regsvr32 应用程序。长话短说,它查看 DLL 是 32 位还是 64 位,并使用相应版本的应用程序。然后它加载 DLL 并传递控制权进行注册。

EXE COM 服务器可以直接运行,所以这就是你向它们传递 /regserver 或 /unregserver 参数的方式。

这些方法适用于 32 位和 64 位 COM 服务器,适用于 32 位和 64 位操作系统。

进一步阅读 - Self-Registration:

如果服务器封装在DLL模块中,DLL必须导出函数DllRegisterServer和DllUnregisterServer。任何希望指示服务器注册自己的应用程序(即,它的所有 CLSID 和类型库 ID)都可以通过 GetProcAddress 函数获得指向 DllRegisterServer 的指针。在 DllRegisterServer 中,DLL 创建所有必要的注册表项,为所有 InprocServer32 或 InprocHandler32 项存储 DLL 的正确路径。

当应用程序希望从系统中删除组件时,它应该通过调用 DllUnregisterServer 取消注册该组件。在此调用中,服务器将完全删除它先前在 DllRegisterServer 中创建的那些条目。服务器不应盲目删除其类的所有条目,因为其他软件可能存储了其他条目,例如 TreatAs 键。

如果服务器封装在 EXE 模块中,希望注册服务器的应用程序使用命令行参数 /RegServer 或 -RegServer(不区分大小写)启动 EXE 服务器。如果应用程序希望注销服务器,它会使用命令行参数 /UnregServer 或 -UnregServer 启动 EXE。自注册 EXE 检测这些命令行参数并调用与 DllRegisterServer 和 DllUnregisterServer 中的 DLL 相同的操作,分别在 LocalServer32 下注册其模块路径而不是 InprocServer32 或 InprocHandler32。

【讨论】:

  • 这实际上并没有解决 /RegServer 和 /RegSvr 是否相同或不同...
  • @DaveInCaz:根本没有 /RegSvr。要么是regsvr32作为注册工具,要么是/RegServer作为命令行参数。
  • 感谢 Roman,但我只是重复了原始问题中的文字。
猜你喜欢
  • 2010-10-02
  • 2011-12-12
  • 2010-09-16
  • 2012-03-14
  • 2012-02-06
  • 2011-02-25
  • 2011-11-22
  • 2015-03-26
  • 2013-08-19
相关资源
最近更新 更多