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


Функция CorBindToRuntimeEx

Позволяет неуправляемым основным приложениям загружать в процесс среду CLR. Функции CorBindToRuntime и CorBindToRuntimeEx выполняют определенные операции, а функция CorBindToRuntimeEx позволяет задать флаги, чтобы указать поведение среды CLR.

Не рекомендуется использовать эту функцию в .NET Framework 4.

Полное описание сценариев, в которых используется функция CorBindToRuntimeEx см. в разделе Общие сведения о размещении.

Эта функция принимает совокупность параметров, позволяющих основному приложению выполнять следующие операции:

  • задавать версию загружаемой среды выполнения;

  • требовать загрузки построения сервера или рабочей станции;

  • выбирать параллельную или непараллельную сборку мусора;

ПримечаниеПримечание

Параллельная сборка мусора не поддерживается в приложениях, использующих эмулятор платформ x86 WOW64 на 64-разрядных системах, которые реализуют архитектуру Intel Itanium (прежнее название — IA-64).Дополнительные сведения об использовании WOW64 в 64-разрядных версиях Windows см. в статье, посвященной запуску 32-разрядных приложений.

  • определять, должны ли сборки загружаться как независящие от домена;

  • получать указатель интерфейса на экземпляр ICorRuntimeHost, с помощью которого можно задать ряд дополнительных параметров для настройки экземпляра среды CLR перед ее запуском.

HRESULT CorBindToRuntimeEx (
    [in]  LPWSTR    pwszVersion, 
    [in]  LPWSTR    pwszBuildFlavor, 
    [in]  DWORD     startupFlags, 
    [in]  REFCLSID  rclsid, 
    [in]  REFIID    riid, 
    [out] LPVOID*   ppv
);

Параметры

  • pwszVersion
    [in] Строка, описывающая версию среды CLR, которую нужно загрузить.

    Номер версии в платформе .NET Framework состоит из четырех частей, отделенных друг от друга точками: основной.дополнительный.построение.редакция. Строка, передаваемая в виде параметра pwszVersion, должна начинаться со знака v, за которым следуют первые три части номера версии (например, v1.0.1529).

    Некоторые версии среды CLR устанавливаются с помощью оператора политики, который задает совместимость с предыдущими версиями CLR. По умолчанию оболочка загрузки проверяет совместимость путем сравнения параметра pwszVersion с операторами политики и загружается самая поздняя версия среды выполнения из числа совместимых с запрашиваемой. Основное приложение может вынудить оболочку пропустить оценку политики и загрузить именно ту версию, которая задана в параметре pwszVersion, передав значение STARTUP_LOADER_SAFEMODE для параметра startupFlags, как описано ниже.

    Если вызывающий объект задает значение NULL для параметра pwszVersion, загружается последняя версия среды выполнения. Значение NULL не позволяет основному приложению указывать версию среды выполнения, которую необходимо загрузить. Хотя в некоторых сценариях этот подход может быть приемлемым, настоятельно рекомендуется точно указывать версию для загрузки.

  • pwszBuildFlavor
    [in] Строка, выбирающая загрузку построения сервера или рабочей станции для среды CLR. Допустимые значения: svr и wks. Построение сервера оптимизировано с учетом преимуществ многопроцессорной системы для сборки мусора, а построение рабочей станции оптимизировано для выполнения клиентских приложений на однопроцессорном компьютере.

    Если для параметра pwszBuildFlavorзадано значение NULL, загружается построение рабочей станции. На однопроцессорном компьютере всегда загружается построение рабочей станции, даже если для параметра pwszBuildFlavorзадано значение svr. Однако если для параметра pwszBuildFlavorзадано значение svr и выбрана параллельная сборка мусора (см. описание параметра startupFlags), загружается построение сервера.

  • startupFlags
    [in] Сочетание значений перечисления STARTUP_FLAGS. Эти флаги позволяют управлять параллельной сборкой мусора, не зависящим от домена кодом и поведением параметра pwszVersion. Если флаги не установлены, по умолчанию используется один домен. Допустимы следующие значения.

    • STARTUP_CONCURRENT_GC

    • STARTUP_LOADER_OPTIMIZATION_SINGLE_DOMAIN

    • STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN

    • STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN_HOST

    • STARTUP_LOADER_SAFEMODE

    • STARTUP_LEGACY_IMPERSONATION

    • STARTUP_LOADER_SETPREFERENCE

    • STARTUP_SERVER_GC

    • STARTUP_HOARD_GC_VM

    • STARTUP_SINGLE_VERSION_HOSTING_INTERFACE

    • STARTUP_LEGACY_IMPERSONATION

    • STARTUP_DISABLE_COMMITTHREADSTACK

    • STARTUP_ALWAYSFLOW_IMPERSONATION

    Описание этих флагов см. в описании перечисления STARTUP_FLAGS.

  • rclsid
    [in] CLSID компонентного класса, реализующий интерфейс ICorRuntimeHost или ICLRRuntimeHost. Поддерживаются значения CLSID_CorRuntimeHost или CLSID_CLRRuntimeHost.

  • riid
    [in] Идентификатор IID интерфейса, запрашиваемого из rclsid. Поддерживаются значения IID_ICorRuntimeHost или IID_ICLRRuntimeHost.

  • ppv
    [out] Возвращаемый указатель на параметр riid.

Заметки

Если параметр pwszVersion задает несуществующую версию среды выполнения, функция CorBindToRuntimeEx возвращает HRESULT со значением CLR_E_SHIM_RUNTIMELOAD.

Контекст выполнения и поток идентификации Windows

В версии 1 среды CLR объект WindowsIdentity не проходит асинхронные точки, такие как новые потоки, пулы потоков или обратные вызовы таймера. В версии 2.0 среды CLR, объект ExecutionContext создает программу-оболочку для определенных сведений, касающихся выполняемого в данный момент потока, и проходит все асинхронные точки, не пересекая границ домена приложения. Аналогично объект WindowsIdentity также проходит все асинхронные точки. Потому он проходит и текущее олицетворение (при его наличии).

Этот проход можно изменить двумя способами.

  1. Изменив параметры ExecutionContext для приостановки прохода отдельно для каждого потока (см. описание методов SuppressFlow, SuppressFlow и SuppressFlowWindowsIdentity).

  2. Изменив режим процесса по умолчанию на режим совместимости с версией 1, в которой объект WindowsIdentity объект не проходит ни одну асинхронную точку, независимо от значений параметров ExecutionContext текущего потока. То, каким образом будет изменен режим по умолчанию, зависит от интерфейса (управляемый исполняемый файл или неуправляемый интерфейс размещения), используемого для загрузки среды CLR.

    1. Для управляемых исполняемых файлов необходимо задать атрибут enabled элемента <legacyImpersonationPolicy> равным true.

    2. Для неуправляемых интерфейсов размещения следует задать флаг STARTUP_LEGACY_IMPERSONATION в параметре startupFlags при вызове функции CorBindToRuntimeEx.

    Режим совместимости с версией 1 применяется ко всему процессу и ко всем доменам приложения в процессе.

Требования

Платформы: см. раздел Требования к системе для .NET Framework.

Заголовок: MSCorEE.h

Библиотека: MSCorEE.dll

Версии платформы .NET Framework: 4, 3.5 с пакетом обновления 1 (SP1), 3.5, 3.0 с пакетом обновления 1 (SP1), 3.0, 2.0 с пакетом обновления 1 (SP1), 2.0, 1.1, 1.0

См. также

Ссылки

Функция CorBindToCurrentRuntime

Функция CorBindToRuntime

Функция CorBindToRuntimeByCfg

Функция CorBindToRuntimeHost

Интерфейс ICorRuntimeHost

Другие ресурсы

Глобальные статические функции платформ .NET Framework 1.1 и 2.0