與版本相關的登錄機碼
大部分 COM 所使用的 Managed 組件都必須在 Windows 登錄中註冊。 使用免註冊的 COM Interop 組件可以免除這項需求。
您可以使用組件註冊工具 (Regasm.exe) 或 RegistrationServices 類別所公開的方法註冊組件。 每一個機制都會建立與版本相關的登錄機碼,以允許多版本的相同組件在電腦上並存執行。
這個主題描述 Regasm.exe 如何加入和移除 COM 可用的登錄項目。 如果您正在撰寫自訂安裝程式,這個主題可以幫助您了解 COM Interop 並存執行的註冊需求。
與版本相關機碼的登錄配置
當您初始註冊組件時,Regasm.exe 會為組件的每個類別建立一組最上層機碼,並在 HKEY CLASSES\ROOT\CLSID\{}\InprocServer32 機碼下新增子機碼 (Subkey),以唯一辨識組件版本。 下列登錄配置顯示 className 版本 1.0.0.0 的子機碼。
CLSID\{}
@="namespaceName.className"
CLSID\{}\InprocServer32
@="mscoree.dll"
ThreadingModel = "Both"
Class="namespaceName.className"
Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.0.3705"
1.0.0.0
Class="namespaceName.className"
Assembly="name, Version=1.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.0.3705"
CLSID\{}\ProgId
@="namespaceName.className"
CLSID\{}\ImplementedCategories\{guid}
當您註冊組件的後續版本時,Regasm.exe 會為每一個新版本加入與版本相關的子機碼。 相同組件的所有版本分享其最上層機碼 (如上面的登錄配置所示)。 下列局部的配置顯示相同組件的子機碼 1.0.0.0 和 2.0.0.0。
1.0.0.0
Class="namespaceName.className"
Assembly="name, Version=1.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.0.3705"
2.0.0.0
Class="namespaceName.className"
Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.1.5000"
與版本相關機碼的移除
當您解除安裝一個組件版本時,Regasm.exe 只會移除與版本相關的子機碼。 例如,如果您解除安裝 className 版本 1.0.0.0,Regasm.exe 將移除 1.0.0.0 子機碼,但是會保留所有的最上層機碼和 2.0.0.0 子機碼。
CLSID\{}
@="namespaceName.className"
CLSID\{}\InprocServer32
@="mscoree.dll"
ThreadingModel = "Both"
Class="namespaceName.className"
Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.0.3705"
Version
2.0.0.0
Class="namespaceName.className"
Assembly="name, Version=2.0.0.0, Culture=neutral, PublicKeyToken="
RuntimeVersion="v1.1.5500"
CLSID\{}\ProgId
@="namespaceName.className"
CLSID\{}\ImplementedCategories\{guid}
當您解除安裝組件的最新版本時,Regasm.exe 會移除所有與版本相關的子機碼。 它也會從登錄中移除與該組件關聯的最上層機碼。