通过


CorBindToRuntime 函数

使非托管主机能够将公共语言运行时(CLR)加载到进程中。

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

Syntax

HRESULT CorBindToRuntime (
    [in]  LPCWSTR     pwszVersion,
    [in]  LPCWSTR     pwszBuildFlavor,
    [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_SAFEMODEflags来强制填充码跳过策略评估并加载指定的pwszVersion确切版本,如下所示。

如果调用方为 指定 null pwszVersion,则加载最新版本的运行时。 传递 null 使主机无法控制加载哪个版本的运行时。 尽管在某些情况下,此方法可能适用,但强烈建议主机提供要加载的特定版本。

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

如果 pwszBuildFlavor 设置为 null,则加载工作站生成。 在单处理器计算机上运行时,即使设置为 svr“工作站生成”,pwszBuildFlavor也会始终加载工作站生成。 但是,如果 pwszBuildFlavor 设置为 svr 并发垃圾回收并指定了并发垃圾回收(请参阅参数的说明 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 值。

CorBindToRuntimeExCorBindToRuntime 执行相同的操作,但该 CorBindToRuntimeEx 函数允许设置标志以指定 CLR 的行为。

Windows 标识的执行上下文和流

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

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

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

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

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

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

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

要求

平台:请参阅系统要求

页眉: MSCorEE.h

库: MSCorEE.dll

.NET Framework 版本:自 1.0 起可用

另见