2012-12-18 95 views
1

我每隔一段时间发布一次,然后更新我在客户端计算机上注册的COM对象。regsrv32:在注册其更新之前是否需要取消注册COM对象?

有关注册表noob问题:

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

+0

GUID这个词经常被滥用。 GUID是一种数据类型,没有意义。你在谈论CLSID吗? LIBID?一个或多个接口ID? –

回答

2

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

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

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

+0

我以为在同一个GUID下注册一个COM对象更新是不好的。 DLL地狱? – Jerome

+0

注销COM对象有哪些不同的选项/命令? – Jerome

+0

这并不坏。您正在使用COM类将后端透明地升级到每个人。 –