RegSvr和RegServer有什么区别?

Rah*_*hul 11 com registration

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

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

RegSvr32 COM.exe
Run Code Online (Sandbox Code Playgroud)

要么

RegSvr32 COM.dll
Run Code Online (Sandbox Code Playgroud)

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

COM.exe /RegServer
COM.exe /RegSvr
Run Code Online (Sandbox Code Playgroud)

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

Rom*_* R. 10

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

由于无法直接运行DLL,因此使用辅助regsvr32应用程序.简而言之,它会查看DLL是32位还是64位并使用相应版本的应用程序.然后它加载DLL并传递控件进行注册.

EXE COM服务器可以直接运行,因此您可以通过它们传递/ regserver或/ unregserver参数.

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

进一步阅读 - 自我注册:

如果服务器打包在DLL模块中,则DLL必须导出函数DllRegisterServer和DllUnregisterServer.任何希望指示服务器注册自身的应用程序(即其所有CLSID和类型库ID)都可以通过GetProcAddress函数获取指向DllRegisterServer的指针.在DllRegisterServer中,DLL创建所有必需的注册表项,为所有InprocServer32或InprocHandler32条目存储DLL的正确路径.

当应用程序希望从系统中删除组件时,应通过调用DllUnregisterServer取消注册该组件.在此调用中,服务器会准确删除先前在DllRegisterServer中创建的条目.服务器不应盲目地删除其类的所有条目,因为其他软件可能存储了其他条目,例如TreatAs密钥.

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

  • @DaveInCaz:根本没有/ RegSvr。它可以是regsvr32作为注册工具,也可以是/ RegServer作为命令行参数。 (4认同)