Installieren einer As-a-Service-Anwendung

Zusätzlich zur Ausführung als ausführbare Datei des lokalen Servers (EXE) kann sich ein COM-Objekt auch selbst packen, um es als Dienstanwendung auszuführen, wenn es von einem lokalen oder Remoteclient aktiviert wird. Dienste unterstützen zahlreiche nützliche und benutzeroberflächenintegrierende Verwaltungsfeatures, darunter lokales und Remotestarten, Beenden, Anhalten und Neustarten sowie die Möglichkeit, den Server für die Ausführung unter einem bestimmten Benutzerkonto und einer Fensterstation einzurichten.

Ein als Dienst geschriebenes Objekt wird zur Verwendung durch COM installiert, indem unter dem AppID-Schlüssel ein LocalService-Wert eingerichtet und eine Standarddienstinstallation ausgeführt wird.

Klassen können auch so konfiguriert werden, dass sie unter einem bestimmten Benutzerkonto ausgeführt werden, wenn sie von einem Remoteclient aktiviert werden, ohne als Dienstanwendung geschrieben zu werden. Dazu installiert die -Klasse einen Benutzernamen und ein Kennwort, die verwendet werden sollen, wenn der SCM seinen lokalen Serverprozess startet.

Wenn eine Klasse auf diese Weise konfiguriert ist, schlagen Aufrufe von CoRegisterClassObject mit dieser CLSID fehl, es sei denn, der Prozess wurde von COM im Namen einer tatsächlichen Aktivierungsanforderung gestartet. Anders ausgedrückt: Klassen, die für die Ausführung als bestimmter Benutzer konfiguriert sind, dürfen nicht unter einer anderen Identität registriert werden.

Der Benutzername stammt aus dem runAs named-value unter dem APPID-Schlüssel der Klasse. Wenn der Benutzername "Interactive User" lautet, wird der Klassencode im Sicherheitskontext des aktuell angemeldeten Benutzers ausgeführt und mit der interaktiven Fensterstation verbunden.

Andernfalls wird das Kennwort aus einem ausgeblendeten Teil der Registrierung abgerufen, der nur Administratoren des Computers und des Systems zur Verfügung steht. Der Benutzername und das Kennwort werden dann verwendet, um eine Anmeldesitzung zu erstellen, in der der Klassencode ausgeführt wird. Wenn der Klassencode auf diese Weise gestartet wird, wird er mit einer eigenen Desktop- und Fensterstation ausgeführt und teilt keine Fensterhandles, die Zwischenablage oder andere Benutzeroberflächenelemente mit dem interaktiven Benutzer oder anderen Klassen, die in anderen Benutzerkonten ausgeführt werden.

Ein Server, der entweder bei LocalService oder RunAs registriert ist, kann ein Objekt in der ausgeführten Objekttabelle registrieren, damit jeder Client eine Verbindung damit herstellen kann. Dazu muss der Aufruf des Servers an IRunningObjectTable::Register das flag ROTFLAGS_ALLOWANYCLIENT festlegen. Ein Server, der dieses Bit festlegt, muss seinen ausführbaren Namen im Abschnitt AppID der Registrierung aufweisen, der auf die AppID für die ausführbare Datei verweist. Ein "activate as activator"-Server (weder als LocalService noch als RunAs registriert) registriert möglicherweise kein Objekt mit diesem Flag.

Registrieren einer Klasse bei der Installation

Registrieren eines ausgeführten EXE-Servers

Registrieren von Objekten im ROT

Selbstregistrierung