Installieren einer As-a-Service-Anwendung

Zusätzlich zur Ausführung als lokale ausführbare Serverdatei (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 und benutzeroberflächenintegrierte Verwaltungsfeatures, z. B. lokales Starten und Remotestarten, Beenden, Anhalten und Neustarten sowie die Möglichkeit, den Server für die Ausführung unter einem bestimmten Benutzerkonto und einer Bestimmten Fensterstation zu erstellen.

Ein als Dienst geschriebenes Objekt wird für die Verwendung durch COM installiert, indem unter seinem AppID-Schlüssel ein LocalService-Wert 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. Hierzu 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 wird, können Aufrufe von CoRegisterClassObject mit dieser CLSID fehlschlagen, es sei denn, der Prozess wurde von COM im Auftrag einer tatsächlichen Aktivierungsanforderung gestartet. Anders ausgedrückt: Klassen, die für die Ausführung als bestimmter Benutzer konfiguriert sind, können unter keinen anderen Identitäten registriert werden.

Der Benutzername wird aus den RunAs named-value unter dem APPID-Schlüssel der Klasse übernommen. Wenn der Benutzername "Interactive User" ist, 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 dem System 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 einem eigenen Desktop und einer eigenen Window Station ausgeführt und gibt keine Fensterhandles, die Zwischenablage oder andere Benutzeroberflächenelemente für den interaktiven Benutzer oder andere Klassen, die in anderen Benutzerkonten ausgeführt werden, weiter.

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 von IRunningObjectTable::Register durch den Server das FLAG ROTFLAGS _ ALLOWANYCLIENT festlegen. Ein Server, der dieses Bit anfing, muss seinen ausführbaren Namen im AppID-Abschnitt der Registrierung haben, der auf die AppID für die ausführbare Datei verweist. Ein Server zum Aktivieren als Aktivator (nicht als LocalService oder 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 in rot

Selbstregistrierung