CorBindToRuntimeEx 函式

啟動非受控主機以將通用語言執行平台 (CLR) 載入流程。 CorBindToRuntimeCorBindToRuntimeEx 函式會執行相同的作業,但 CorBindToRuntimeEx 函式可供您設定旗標來指定 CLR 的行為。

此函式在 .NET Framework 4 中已被取代。

此函式會採用一組參數,以允許主機執行下列動作:

  • 指定將載入的執行階段版本。

  • 指出是否應該載入伺服器或工作站組建。

  • 控制是否完成並行記憶體回收或非並行記憶體回收。

注意

在實作 Intel Itanium 結構 (先前稱為 IA-64) 64 位元系統上執行 WOW64 x86 模擬器的應用程式不支援並行記憶體回收。 如需在 64 位元 Windows 系統上使用 WOW64 的詳細資訊,請參閱執行 32 位元應用程式

  • 控制組件是否以網域中性的形式載入。

  • 取得 ICorRuntimeHost 的介面指標,可用來在啟動 CLR 之前設定 CLR 執行個體的其他選項。

語法

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,並載入與所要求版本相容的最新版本執行階段。 主機可以強制填充碼略過原則評估,並傳遞 startupFlags 參數的 STARTUP_LOADER_SAFEMODE 值,以載入 pwszVersion 中指定的版本,如下所示。

如果呼叫端為 指定 null pwszVersionCorBindToRuntimeEx 則會識別版本號碼低於 .NET Framework 4 執行時間的已安裝執行時間集合,並從該集合載入最新版本的執行時間。 它不會載入 .NET Framework 4 或更新版本,而且如果未安裝舊版,則會失敗。 請注意,若傳遞 null,會讓主機無法控制載入哪個版本的執行階段。 雖然此方法可能適用於某些情節,但我們強烈建主機提供待載入的特定版本。

pwszBuildFlavor
[in] 指定是否載入伺服器或 CLR 的工作站組建。 有效值為 svrwks。 伺服器組建已經過最佳化,可利用多個處理器進行記憶體回收,而工作站組建也已針對在單一處理器電腦上執行的用戶端應用程式進行最佳化。

如果 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_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] 實作 ICorRuntimeHostICLRRuntimeHost 介面 coclass 的 CLSID。 受支援的值為 CLSID_CorRuntimeHost 或 CLSID_CLRRuntimeHost。

riid
[in] 來自 rclsid 要求介面的 IID。 受支援的值為 IID_ICorRuntimeHost 或 IID_ICLRRuntimeHost。

ppv
[out] 傳回的介面指標 riid

備註

如果 pwszVersion 指定不存在的執行階段版本,則 CorBindToRuntimeEx 會傳回 CLR_E_SHIM_RUNTIMELOAD 的 HRESULT 值。

Windows 身分識別的執行內容和流程

在 CLR 第 1 版中,WindowsIdentity 物件不會流經非同步點,例如新的執行緒、執行緒集區或計時器回呼。 在 CLR 2.0 版中,ExecutionContext 物件會包裝目前執行中的執行緒的一些資訊,並使其流經任何非同步點,但不會跨越應用程式定義域界限。 同樣地,WindowsIdentity 物件也會流經任何非同步點。 因此,其也會流經執行緒上目前存在的模擬。

您可透過兩種方式改變流程:

  1. 修改 ExecutionContext 設定來隱藏每個執行緒基礎的流程 (請參閱 SuppressFlowSuppressFlowSuppressFlowWindowsIdentity 方法)。

  2. 將流程預設模式變更為第 1 版相容性模式,不管目前執行緒上的 ExecutionContext 設定為何,WindowsIdentity 物件都不會流經任何非同步點。 變更預設模式的方式,取決於您是否使用受控可執行檔或非受控裝載介面來載入 CLR:

    1. 針對受控可執行檔,您必須將 <legacyImpersonationPolicy> 元素的 enabled 屬性設定為 true

    2. 針對非受控裝載主控介面,請在呼叫 CorBindToRuntimeEx 函式時,設定 startupFlags 參數中的 STARTUP_LEGACY_IMPERSONATION 旗標。

    第 1 版相容性模式適用於整個流程,以及流程中的所有應用程式定義域。

規格需求

平台:請參閱系統需求

標題: MSCorEE.h

程式庫: MSCorEE.dll

.NET Framework版本:自 1.0 起可用

另請參閱