次の方法で共有


サービス アプリケーションとしてのインストール

COM オブジェクトは、ローカル サーバー実行可能ファイル (EXE) として実行するだけでなく、ローカル クライアントまたはリモート クライアントによってアクティブ化されたときにサービス アプリケーションとして実行されるようにパッケージ化することもできます。 サービスは、ローカルおよびリモートの開始、停止、一時停止、再起動、および特定のユーザー アカウントとウィンドウ ステーションで実行するサーバーを確立する機能など、便利でユーザー インターフェイスに統合された管理機能を多数サポートしています。

サービスとして記述されたオブジェクトは、APPID キーで LocalService 値を確立し、標準のサービス インストールを実行することで、COM で使用するためにインストールされます。

また、サービス アプリケーションとして書き込まずにリモート クライアントによってアクティブ化されるときに、クラスを特定のユーザー アカウントで実行するように構成することもできます。 これを行うために、クラスは、SCM がローカル サーバー プロセスを起動するときに使用するユーザー名とパスワードをインストールします。

クラスがこの方法で構成されている場合、実際のアクティブ化要求の代わりに COM によってプロセスが起動されない限り、この CLSID を使用した CoRegisterClassObject の呼び出しは失敗します。 言い換えると、特定のユーザーとして実行するように構成されたクラスは、他の ID では登録されない可能性があります。

ユーザー名は、クラスの APPID キーの下にある RunAs の名前付き値から取得されます。 ユーザー名が "Interactive User" の場合、クラス コードは現在ログオンしているユーザーのセキュリティ コンテキストで実行され、対話型ウィンドウ ステーションに接続されます。

それ以外の場合、パスワードは、コンピューターの管理者とシステムのみが使用できるレジストリの非表示の部分から取得されます。 その後、ユーザー名とパスワードを使用して、クラス コードを実行するログオン セッションを作成します。 この方法で起動すると、クラス コードは独自のデスクトップおよびウィンドウ ステーションで実行され、対話型ユーザーまたは他のユーザー アカウントで実行されている他のクラスとウィンドウ ハンドル、クリップボード、またはその他のユーザー インターフェイス要素を共有しません。

LocalService または RunAs に登録されているサーバーは、実行中のオブジェクト テーブルにオブジェクトを登録して、任意のクライアントがそれに接続できるようにします。 これを行うには、サーバーの IRunningObjectTable::Register の呼び出しで ROTFLAGS_ALLOWANYCLIENT フラグを設定する必要があります。 このビットを設定するサーバーの実行可能ファイル名は、実行可能ファイルの AppID を参照するレジストリの AppID セクションに含まれている必要があります。 "activate as activator" サーバー ( LocalService または RunAs として登録されていない) は、このフラグを持つオブジェクトを登録できません。

インストール でのクラスの登録

実行中の EXE サーバー の登録の

ROT でのオブジェクトの登録の

自己登録