1

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

关于注册表的菜鸟问题:

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

4

1 回答 1

2

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

取消注册被替换的模块,然后在安装新模块后注册它会更安全。或者,您的新 COM 库可以在内部处理升级并明确删除已停用的注册(与普通取消注册旧版本相比,它更复杂且通常不必要)。如果您有任何持久状态,注销/重新注册周期可能会删除一些持久状态,并且注销会清除它们。

如果您希望您的版本在目标系统中并排运行,您可能希望使用另一种方法。在这种情况下,您将为所有/某些类使用新的 CLSID、不同的(尤其是版本化的)ProgID 和版本无关的 ProgID,以便应用程序绑定到“当前”或已安装的最新版本的类。

于 2012-12-18T16:43:22.543 回答