通过


CorBindToRuntimeEx 函数

使非托管主机能够将公共语言运行时(CLR)加载到进程中。 CorBindToRuntimeCorBindToRuntimeEx函数执行相同的操作,但该CorBindToRuntimeEx函数允许设置标志以指定 CLR 的行为。

.NET Framework 4 中已弃用此函数。

此函数采用一组参数,允许主机执行以下操作:

  • 指定将加载的运行时版本。

  • 指示是否应加载服务器或工作站生成。

  • 控制是执行并发垃圾回收还是非并发垃圾回收。

注释

在实现 Intel Itanium 体系结构(以前称为 IA-64)的 64 位系统上运行 WOW64 x86 模拟器的应用程序不支持并发垃圾回收。 有关在 64 位 Windows 系统上使用 WOW64 的详细信息,请参阅 “运行 32 位应用程序”。

  • 控制程序集是否作为非域性加载。

  • 获取指向 ICorRuntimeHost 的接口指针,该指针可用于设置用于在启动 CLR 实例之前配置 CLR 实例的其他选项。

Syntax

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

参数

pwszVersion [in]描述要加载的 CLR 版本的字符串。

.NET Framework 中的版本号由句点分隔的四个部分组成: major.minor.build.revision。 传递的 pwszVersion 字符串必须以字符“v”开头,后跟版本号的前三部分(例如“v1.0.1529”)。

某些版本的 CLR 随策略语句一起安装,该语句指定与以前版本的 CLR 的兼容性。 默认情况下,启动填充码根据策略语句进行评估 pwszVersion ,并加载与所请求的版本兼容的最新版本的运行时。 主机可以通过传递参数的值STARTUP_LOADER_SAFEMODEstartupFlags来强制填充码跳过策略评估并加载指定的pwszVersion确切版本,如下所示。

如果调用方指定 pwszVersionnull, CorBindToRuntimeEx 则标识版本号低于 .NET Framework 4 运行时的已安装运行时集,并从该集加载最新版本的运行时。 它不会加载 .NET Framework 4 或更高版本,如果未安装早期版本,则失败。 请注意,传递 null 使主机无法控制加载哪个版本的运行时。 尽管在某些情况下,此方法可能适用,但强烈建议主机提供要加载的特定版本。

pwszBuildFlavor [in]一个字符串,指定是加载服务器还是 CLR 的工作站内部版本。 有效值为 svrwks。 服务器生成经过优化,以利用多个处理器进行垃圾回收,并且工作站生成针对在单处理器计算机上运行的客户端应用程序进行了优化。

如果 pwszBuildFlavor 设置为 null,则加载工作站生成。 在单处理器计算机上运行时,即使设置为 svr“工作站生成”,pwszBuildFlavor也会始终加载工作站生成。 但是,如果 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_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 实现 ICorRuntimeHostICLRRuntimeHost 接口的 coclass。 支持的值是CLSID_CorRuntimeHost或CLSID_CLRRuntimeHost。

riid [in] IID 请求的接口来自 rclsid. 支持的值是IID_ICorRuntimeHost或IID_ICLRRuntimeHost。

ppv [out]返回的接口指针指向 riid

注解

如果 pwszVersion 指定不存在的运行时版本, CorBindToRuntimeEx 则返回CLR_E_SHIM_RUNTIMELOAD的 HRESULT 值。

Windows 标识的执行上下文和流

在 CLR 版本 1 中, WindowsIdentity 对象不会流过异步点,例如新线程、线程池或计时器回调。 在 CLR 版本 2.0 中,对象 ExecutionContext 包装有关当前正在执行的线程的一些信息,并将其流过任何异步点,但不会跨应用程序域边界流动。 同样,对象 WindowsIdentity 也会流过任何异步点。 因此,线程上的当前模拟(如果有)也会流动。

可以通过两种方式更改流:

  1. 通过修改 设置以按线程禁止流(请参阅 /> 和 方法)。

  2. 通过将进程默认模式更改为版本 1 兼容模式,对象 WindowsIdentity 不会流经任何异步点,而不考虑 ExecutionContext 当前线程上的设置。 如何更改默认模式取决于是使用托管可执行文件还是非托管托管托管接口来加载 CLR:

    1. 对于托管可执行文件,必须将 legacyImpersonationPolicy> 元素的属性<设置为 trueenabled

    2. 对于非托管托管接口,在调用CorBindToRuntimeEx函数时在startupFlags参数中设置STARTUP_LEGACY_IMPERSONATION标志。

    版本 1 兼容模式适用于整个进程和进程中的所有应用程序域。

要求

平台:请参阅系统要求

页眉: MSCorEE.h

库: MSCorEE.dll

.NET Framework 版本:自 1.0 起可用

另见