Freigeben über


Installieren als Dienstanwendung

Zusätzlich zur Ausführung als ausführbare Datei des lokalen Servers (EXE) kann sich ein COM-Objekt auch selbst packen, um als Dienstanwendung ausgeführt zu werden, wenn es von einem lokalen oder Remoteclient aktiviert wird. Dienste unterstützen zahlreiche nützliche administrative Funktionen, die in die Benutzeroberfläche integriert sind, einschließlich lokalen und Remote-Start, Beenden, Anhalten und Neustarten sowie der Möglichkeit, den Server so einzurichten, dass er unter einem bestimmten Benutzerkonto und Fensterstation läuft.

Ein objekt, das als Dienst geschrieben wurde, wird für die Verwendung durch COM installiert, indem ein LocalService-Wert unter dem AppID-Schlüssel erstellt 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, das verwendet werden soll, wenn der SCM seinen lokalen Serverprozess startet.

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

Der Benutzername wird aus dem Wert RunAs unter dem APPID-Schlüssel der Klasse entnommen. Wenn der Benutzername "Interaktiver Benutzer" 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 Für Administratoren des Computers und für das System verfügbar ist. 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, läuft er mit einer eigenen Desktop- und Fensterstation und teilt keine Fenster-Handles, die Zwischenablage oder andere Benutzeroberflächenelemente mit dem interaktiven Benutzer oder anderen Klassen, die in anderen Benutzerkonten ausgeführt werden.

Ein server, der entweder mit LocalService oder RunAs registriert ist, kann ein Objekt in der ausgeführten Objekttabelle registrieren, um jedem Client die Verbindung mit dem Objekt zu ermöglichen. Dazu muss der Aufruf des Servers an IRunningObjectTable::Register das ROTFLAGS_ALLOWANYCLIENT-Kennzeichen festlegen. Ein Server, der dieses Bit festlegt, muss im Abschnitt "AppID" der Registrierung über seinen ausführbaren Namen verfügen, der auf die AppID für die ausführbare Datei verweist. Ein "Activate as Activator"-Server (der weder als LocalService noch als RunAs registriert ist) darf möglicherweise kein Objekt mit diesem Flag registrieren.

Registrieren einer Klasse bei der Installation

Registrieren eines ausgeführten EXE-Servers

Registrieren von Objekten im ROT-

Selbstregistrierung