是/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下注册其模块路径.