Поделиться через


Установка в качестве приложения-службы

Помимо выполнения в качестве исполняемого файла локального сервера (EXE), com-объект может также упаковать себя в качестве приложения-службы при активации локального или удаленного клиента. Службы поддерживают множество полезных и пользовательских интерфейсов, интегрированных административных функций, включая локальные и удаленные запуски, остановку, приостановку и перезапуск, а также возможность установить сервер для запуска под определенной учетной записью пользователя и станцией окон.

Объект, написанный как услуга, устанавливается для использования COM, устанавливая значение LocalService под ключом AppID и выполняя стандартную установку службы.

Классы также могут быть настроены для запуска под определенной учетной записью пользователя при активации удаленного клиента без записи в качестве приложения-службы. Для этого класс устанавливает имя пользователя и пароль, который будет использоваться при запуске локального сервера SCM.

Если класс настроен таким образом, вызовы CoRegisterClassObject с этим CLSID завершаются ошибкой, если процесс не был запущен COM от имени фактического запроса активации. Другими словами, классы, настроенные для запуска от имени конкретного пользователя, могут не быть зарегистрированы в любом другом удостоверении.

Имя пользователя берется из именованного значения RunAs под ключом APPID класса. Если имя пользователя — "Интерактивный пользователь", код класса выполняется в контексте безопасности пользователя, вошедшего в систему, и подключен к интерактивной станции окон.

В противном случае пароль извлекается из скрытой части реестра, доступной только администраторам компьютера и системе. Затем имя пользователя и пароль используются для создания сеанса входа в систему, в котором выполняется код класса. При запуске таким образом код класса выполняется с собственным рабочим столом и станцией окон и не предоставляет общий доступ к дескрипторам окон, буферу обмена или другим элементам пользовательского интерфейса с интерактивным пользователем или другими классами, работающими в других учетных записях пользователей.

Сервер, зарегистрированный в LocalService или RunAs , может зарегистрировать объект в работающей таблице объектов, чтобы разрешить любому клиенту подключаться к нему. Для этого вызов сервера к IRunningObjectTable::Register должен задать флаг ROTFLAGS_ALLOWANYCLIENT. Этот бит должен иметь имя исполняемого файла в разделе AppID реестра, который ссылается на AppID для исполняемого файла. Сервер "активировать как активатор" (не зарегистрированный как LocalService или RunAs) может не зарегистрировать объект с этим флагом.

Регистрация класса во время установки

Регистрация запущенного EXE-сервера

Регистрация объектов в ROT

Самостоятельная регистрация