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


Регистрация сервера 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. Активация относится к вызовам любой из следующих функций активации:

Чтобы запустить экземпляр предоставленного системой суррогата, задайте значение DllSurrogate либо как пустую строку, либо как NULL. Чтобы указать запуск настраиваемого суррогата, задайте значение равным пути суррогата.

Если для одного и того же идентификатора AppID указаны оба RemoteServerName и DllSurrogate, значение RemoteServerName игнорируется, а значение DllSurrogate вызывает активацию на локальном компьютере. Для удаленной суррогатной активации укажите RemoteServerName, но не DllSurrogate на клиенте и укажите DllSurrogate на сервере.

Сервер DLL, предназначенный всегда работать отдельно в своем собственном суррогатном процессе, лучше всего настроен с AppID, равным CLSID. В разделе AppIDпросто укажите DllSurrogate именованное значение с пустым строковым значением.

Рекомендуется настроить сервер DLL, предназначенный для запуска в одиночном режиме в собственном суррогатном процессе и для обслуживания нескольких клиентов в сети с значением RunAs, указанным в разделе реестра AppID. Будет ли в указано "Интерактивный пользователь" или конкретное удостоверение пользователя, зависит от пользовательского интерфейса, безопасности и других требований к серверу. При указании значения запуска, загружается только один экземпляр сервера для обслуживания всех клиентов, независимо от удостоверения клиента. С другой стороны, не настраивайте сервер с RunAs, если намерение состоит в том, чтобы один экземпляр DLL-сервера, работающий в суррогате, обслуживал каждое удаленное удостоверение личности клиента.

Требования к серверу DLL

Суррогатный общий доступ