在安裝時註冊類別
如果類別隨時可供用戶端使用,就如同大部分應用程式一樣,您通常會透過安裝和安裝程序進行註冊。 這表示將應用程式的相關信息放入登錄中,包括要具現化其物件的方式和位置。 必須為所有 CLSID 註冊此信息。 其他資訊是選擇性的。 Regsvr32 之類的工具可讓您輕鬆地撰寫安裝程式,以在安裝時註冊伺服器。
如果您不依賴系統預設值,登錄中有兩個重要的機碼:CLSID 和 AppID。 在這些索引鍵下的重要資訊片段之一,是物件如何實例化。 物件可以被指定為進行中、跨進程本機或跨進程遠端。
在 AppID 索引鍵下,有數個值可定義該應用程式特有的資訊。 其中 RemoteServerName 和 ActivateAtStorage,這兩者都可以用來允許用戶端建立物件,而用戶端對伺服器的位置沒有內建知識。 (如需遠端具現化的詳細資訊,請參閱 尋找遠端物件 和 實例建立協助程式函式。)
伺服器也可以安裝為服務,或在特定用戶帳戶下執行。 如需詳細資訊,請參閱 安裝即服務應用程式。
不是服務或在特定用戶帳戶下執行的伺服器或 ROT 物件,可稱為「作為啟動者啟動的」伺服器。 針對這些伺服器,用戶端的安全內容和視窗工作站/桌面的必須與伺服器的相符。 嘗試連線到遠端伺服器的用戶端會被視為具有 NULL 視窗工作站/桌面,因此在此實例中只會比較伺服器安全性上下文。 (如需有關 SID 的詳細資訊,請參閱 COM 中的安全性。)當程序第一次連接到分散式 COM 服務時,COM 會快取程序的視窗工作站/桌面。 因此,在呼叫 CoInitialize 或 CoInitializeEx之後,COM 用戶端和伺服器不應變更其工作站或執行緒桌面。
當類別註冊為同進程時,對 CoGetClassObject 的呼叫將自動由 COM 傳遞至 DllGetClassObject 函式,而類別必須實作此函式,以便讓呼叫的物件獲得其類別物件的指標。
在可執行檔中實作的類別可以指定 COM 應該執行其進程,並等候進程透過呼叫 CoRegisterClassObject 函式來註冊其類別物件的 IClassFactory 介面。
相關主題