Share via


安裝即服務應用程式

除了以本機伺服器可執行檔 (EXE) 執行之外,COM 物件也可以封裝本身,以在本機或遠端用戶端啟用時以服務應用程式的形式執行。 服務支援許多實用和使用者介面的整合式系統管理功能,包括本機和遠端啟動、停止、暫停和重新啟動,以及建立伺服器在特定用戶帳戶和視窗月臺下執行的能力。

撰寫為服務的物件會安裝供 COM 使用,方法是在其 AppID 機碼下建立 LocalService 值,並執行標準服務安裝。

當遠端用戶端啟用時,類別也可以設定為在特定用戶帳戶下執行,而不會寫入為服務應用程式。 若要這樣做,類別會安裝使用者名稱和密碼,以在 SCM 啟動其本機伺服器進程時使用。

以這種方式設定類別時,除非 COM 代表實際的啟用要求啟動程式,否則使用此 CLSID 呼叫 CoRegisterClassObject 將會失敗。 換句話說,設定為以特定使用者身分執行的類別可能不會在任何其他身分識別下註冊。

用戶名稱取自 類別APPID索引鍵底下的 RunAs 具名值。 如果使用者名稱為 「Interactive User」,則類別程式代碼會在目前登入使用者的安全性內容中執行,並連線到互動式視窗月臺。

否則,密碼會從登錄的隱藏部分擷取,而只能供計算機系統管理員和系統使用。 接著會使用使用者名稱和密碼來建立執行類別程式代碼的登入工作階段。 以這種方式啟動時,類別程式代碼會以自己的桌面和視窗月臺執行,而且不會與互動式使用者或其他在使用者帳戶中執行的類別共用視窗句柄、剪貼簿或其他使用者介面元素。

使用 LocalServiceRunAs 註冊的伺服器可以在執行中的物件數據表中註冊物件,以允許任何用戶端連線到它。 若要這樣做,伺服器對 IRunningObjectTable::Register 的呼叫必須設定ROTFLAGS_ALLOWANYCLIENT旗標。 此位設定此位的伺服器必須在登錄的AppID區段中具有其可執行檔名稱,該區段會參考可執行檔的AppID。 「啟動為啟動器」伺服器(未註冊為 LocalServiceRunAs)可能不會使用此旗標註冊物件。

在安裝時註冊類別

註冊執行中的 EXE 伺服器

在 ROT 中註冊物件

自我註冊