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

Если класс должен быть доступен клиентам в любое время, так как большинство приложений, вы обычно регистрируете его с помощью программы установки и установки. Это означает, что в реестр помещаются сведения о приложении, в том числе о том, как и где должны создаваться его объекты. Эти сведения должны быть зарегистрированы для всех CLSID. Другие сведения являются необязательными. Такие средства, как Regsvr32, упрощают запись программы установки, которая регистрирует серверы при установке.

Если вы не используете системные значения по умолчанию, в реестре есть два важных раздела: CLSID и AppID. Среди важных элементов информации в этих ключах заключается в том, как объект должен быть создан. Объекты могут быть назначены как встроенные, внепроцессные или внепроцессные удаленные.

В разделе AppID есть несколько значений, определяющих сведения, относящиеся к приложению. Среди них — RemoteServerName и ActivateAt служба хранилища, которые можно использовать для разрешения клиенту создавать объект, при этом клиент не имеет встроенных знаний о расположении сервера. (Дополнительные сведения об удаленном создании экземпляров см. в разделе Поиск вспомогательных функций удаленного объекта и создания экземпляра.)

Сервер также можно установить как службу или запустить под определенной учетной записью пользователя. Дополнительные сведения см. в разделе "Установка в качестве приложения-службы".

Сервер или объект ROT, не являющийся службой или работающим под определенной учетной записью пользователя, можно называть сервером "активировать как активатор". Для этих серверов контекст безопасности и станция окна или рабочий стол клиента должны соответствовать серверу. Клиент, пытающийся подключиться к удаленному серверу, считается иметь окне NULL станции или рабочего стола, поэтому в этом экземпляре сравнивается только контекст безопасности сервера. (Дополнительные сведения о идентификаторах SID см. в разделе .Безопасность в COM.) COM кэширует станцию окна или рабочий стол процесса при первом подключении к распределенной службе COM. Таким образом, клиенты и серверы COM не должны изменять их станции окон или рабочих столов потоков процесса после вызова CoInitialize или CoInitializeEx.

Когда класс регистрируется как внутрипроцессный, вызов CoGetClassObject для создания объекта класса автоматически передается COM в функцию DllGetClassObject, которую класс должен реализовать, чтобы дать вызывающему объекту указатель на его объект класса.

Классы, реализованные в исполняемых файлах, могут указать, что COM должен выполнить свой процесс и дождаться регистрации интерфейса IClassFactory объекта класса через вызов функции CoRegisterClassObject.

Разделы реестра COM

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

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

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

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

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