Com RegSvr和RegServer之间的区别是什么?

Com RegSvr和RegServer之间的区别是什么?,com,registration,Com,Registration,/RegServer和/RegSvr是否相同或不同,如果不同为什么/如何 例如,我看到(例如32位操作系统)这种风格: RegSvr32 COM.exe 或 或者作为替代方案(在64位操作系统上): 这些不同的方法做的是相同的事情吗?COM服务器在32位64位操作系统中以相同的方式注册。这个问题与自我注册有关,这是注册COM服务器最直接的方法——要求服务器分别更新HKLM/HKCR注册表 由于无法直接运行DLL,因此需要使用helperregsvr32应用程序。长话短说,它查看DLL是32位还

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

例如,我看到(例如32位操作系统)这种风格:

RegSvr32 COM.exe

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


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

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

由于无法直接运行DLL,因此需要使用helper
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检测这些命令行参数,并调用与DllRegisterServer和DllUnregisterServer中的DLL相同的操作,分别在LocalServer32而不是InprocServer32或InprocHandler32下注册其模块路径


请记住,regsvr32适用于DLL文件,但对于必须使用/regserver开关的exe文件,我们如何验证COM组件已成功注册?这实际上并不能解决/regserver和/RegSvr是相同还是不同…@DaveInCaz:根本没有/RegSvr。它要么是作为注册工具的regsvr32,要么是作为命令行参数的/RegServer。
RegSvr32 COM.dll
COM.exe /RegServer
COM.exe /RegSvr