Регистрация сервера 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
- CoGetInstanceFromI служба хранилища
- IMoniker::BindToObject
Чтобы запустить экземпляр суррогата, предоставленного системой, задайте значение DllSurrogate пустой строкой или значением NULL. Чтобы указать запуск пользовательского суррогата, задайте для значения путь суррогата.
Если для одного и того же идентификатора AppID заданы как RemoteServerName, так и для dllSurrogate значение RemoteServerName игнорируется, а значение DllSurrogate вызывает активацию на локальном компьютере. Для удаленной суррогатной активации укажите RemoteServerName, но не DllSurrogate на клиенте и укажите DllSurrogate на сервере.
Сервер DLL, предназначенный для постоянного запуска в собственном суррогатном процессе, лучше всего настроен с appID равным CLSID. В разделе AppID просто укажите именованное значение DllSurrogate с пустым строковым значением.
Рекомендуется настроить сервер DLL, предназначенный для запуска в собственном суррогатном процессе и обслуживать несколько клиентов в сети со значением RunAs , указанным в разделе реестра AppID . Указывает ли runAs "Интерактивный пользователь" или определенное удостоверение пользователя зависит от пользовательского интерфейса, безопасности и других требований к серверу. Если задано значение RunAs, для обслуживания всех клиентов загружается только один экземпляр сервера, независимо от удостоверения клиента. С другой стороны, не настраивайте сервер с помощью RunAs , если намерение состоит в том, чтобы один экземпляр сервера DLL, работающий в суррогате, обслуживать каждое удаленное удостоверение клиента.
См. также