regsrv32:在注册COM对象的更新之前,是否需要注销该对象?

regsrv32:在注册COM对象的更新之前,是否需要注销该对象?,com,Com,我不时地发布我在客户机上注册的COM对象的更新 Noob关于注册表的问题: 每次我用相同的名称空间和对象名在一个新的随机GUID下注册这些更新时,发生了什么?对象是否被替换?以前的objects版本还在吗?我需要注销以前的版本吗?是否可以注销原始GUID?您需要的注册取决于您选择的更新COM对象的方法。最简单的方法是更新现有对象,在这种情况下,您可以保持CLSID和对象的完整性,并可能使用新方法和接口进行扩展。在这种情况下,您基本上不需要注销,但是您可能会遇到这样的情况:您正在注销某些COM类,

我不时地发布我在客户机上注册的COM对象的更新

Noob关于注册表的问题:


每次我用相同的名称空间和对象名在一个新的随机GUID下注册这些更新时,发生了什么?对象是否被替换?以前的objects版本还在吗?我需要注销以前的版本吗?是否可以注销原始GUID?

您需要的注册取决于您选择的更新COM对象的方法。最简单的方法是更新现有对象,在这种情况下,您可以保持CLSID和对象的完整性,并可能使用新方法和接口进行扩展。在这种情况下,您基本上不需要注销,但是您可能会遇到这样的情况:您正在注销某些COM类,如果不注销它,您将在注册表中将其注册保留为孤立垃圾

更安全的做法是取消注册正在更换的模块,然后在安装新模块后注册。或者,您的新COM库可以在内部进行升级,并显式删除失效的注册(与普通的注销旧版本相比,它更复杂,而且通常不必要)。取消注册/重新注册周期可能会删除一些持久状态(如果有的话),取消注册会清除它们


若你们希望你们的版本在目标系统中并排运行,你们可能更喜欢另一个apoproach。在这种情况下,您将对所有/某些类使用新的CLSID,对应用程序使用不同的(特别是版本化的)ProgID和版本独立的ProgID来绑定到“当前”或已安装的最新版本的类。

我认为在同一GUID下注册COM对象更新是不好的。DLL地狱?取消注册COM对象有哪些不同的选项/命令?还不错。您正在对使用COM类的所有人透明地升级后端。GUID一词经常被严重误用。GUID是一种数据类型,没有任何意义。你是说克莱希德吗?利比德?一个或多个接口ID?