Installazione come applicazione di servizio
Oltre all'esecuzione come eseguibile del server locale (EXE), un oggetto COM può anche creare un pacchetto per l'esecuzione come applicazione di servizio quando viene attivato da un client locale o remoto. I servizi supportano numerose funzionalità amministrative utili e utente integrate, tra cui avvio locale e remoto, arresto, sospensione e riavvio, nonché la possibilità di stabilire il server per l'esecuzione con un account utente e una stazione finestra specifici.
Un oggetto scritto come servizio viene installato per l'uso da PARTE di COM stabilendo un valore LocalService nella relativa chiave AppID ed eseguendo un'installazione di servizio standard.
Le classi possono anche essere configurate per l'esecuzione con un account utente specifico quando vengono attivate da un client remoto senza essere scritte come applicazione di servizio. A tale scopo, la classe installa un nome utente e una password da usare quando gestione controllo servizi avvia il processo del server locale.
Quando una classe viene configurata in questo modo, le chiamate a CoRegisterClassObject con questo CLSID avranno esito negativo a meno che il processo non sia stato avviato da COM per conto di una richiesta di attivazione effettiva. In altre parole, le classi configurate per l'esecuzione come utente specifico potrebbero non essere registrate in altre identità.
Il nome utente viene ricavato dal valore denominato RunAs nella chiave APPID della classe. Se il nome utente è "Interactive User", il codice di classe viene eseguito nel contesto di sicurezza dell'utente attualmente connesso ed è connesso alla stazione interattiva della finestra.
In caso contrario, la password viene recuperata da una parte nascosta del Registro di sistema disponibile solo per gli amministratori del computer e per il sistema. Il nome utente e la password vengono quindi usati per creare una sessione di accesso in cui viene eseguito il codice di classe. Quando viene avviato in questo modo, il codice di classe viene eseguito con il proprio desktop e window-station e non condivide handle di finestra, appunti o altri elementi dell'interfaccia utente con l'utente interattivo o altre classi in esecuzione in altri account utente.
Un server registrato con LocalService o RunAs può registrare un oggetto nella tabella degli oggetti in esecuzione per consentire a qualsiasi client di connettersi. A tale scopo, la chiamata del server a IRunningObjectTable::Register deve impostare il flag di ROTFLAGS_ALLOWANYCLIENT. Un'impostazione del server di questo bit deve avere il nome eseguibile nella sezione AppID del Registro di sistema che fa riferimento all'AppID per l'eseguibile. Un server "activate as activator" (non registrato come LocalService o RunAs) potrebbe non registrare un oggetto con questo flag.
Argomenti correlati