Регистрация сервера DLL для суррогатной активации
Сервер DLL будет загружен в суррогатный процесс в следующих условиях:
- В реестре должно быть задано значение AppID в разделе CLSID и соответствующий ключ AppID.
- При вызове активации устанавливается бит CLSCTX_LOCAL_SERVER, а ключ CLSID не указывает на LocalServer32, LocalServerили LocalService. Если заданы другие биты CLSCTX, выполняетсяалгоритм обработкидля флагов внутрипроцессного, локального или удаленного выполнения.
- Ключ CLSID содержит подключ InprocServer32.
- Библиотека DLL, указанная в ключе InprocServer32, существует.
- Значение DllSurrogate существует в ключе AppID.
Если существуют LocalServer, LocalServer32или LocalService, что указывает на наличие исполняемого файла (EXE), то сервер или служба EXE всегда будут запускаться с предпочтением перед загрузкой сервера DLL в суррогатный процесс.
Для суррогатной активации должно быть указано именованное значение DllSurrogate. Активация относится к вызовам любой из следующих функций активации:
- CoGetClassObject
- CoCreateInstanceEx
- CoGetInstanceFromFile
- CoGetInstanceFromIStorage
- IMoniker::BindToObject
Чтобы запустить экземпляр предоставленного системой суррогата, задайте значение DllSurrogate либо как пустую строку, либо как NULL. Чтобы указать запуск настраиваемого суррогата, задайте значение равным пути суррогата.
Если для одного и того же идентификатора AppID указаны оба RemoteServerName и DllSurrogate, значение RemoteServerName игнорируется, а значение DllSurrogate вызывает активацию на локальном компьютере. Для удаленной суррогатной активации укажите RemoteServerName, но не DllSurrogate на клиенте и укажите DllSurrogate на сервере.
Сервер DLL, предназначенный всегда работать отдельно в своем собственном суррогатном процессе, лучше всего настроен с AppID, равным CLSID. В разделе AppIDпросто укажите DllSurrogate именованное значение с пустым строковым значением.
Рекомендуется настроить сервер DLL, предназначенный для запуска в одиночном режиме в собственном суррогатном процессе и для обслуживания нескольких клиентов в сети с значением RunAs, указанным в разделе реестра AppID. Будет ли в указано "Интерактивный пользователь" или конкретное удостоверение пользователя, зависит от пользовательского интерфейса, безопасности и других требований к серверу. При указании значения запуска, загружается только один экземпляр сервера для обслуживания всех клиентов, независимо от удостоверения клиента. С другой стороны, не настраивайте сервер с RunAs, если намерение состоит в том, чтобы один экземпляр DLL-сервера, работающий в суррогате, обслуживал каждое удаленное удостоверение личности клиента.
Связанные разделы