2012-12-18 93 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類將後端透明地升級到每個人。 –