CorBindToRuntimeEx 函式
啟動非受控主機以將通用語言執行平台 (CLR) 載入流程。 CorBindToRuntime 和 CorBindToRuntimeEx
函式會執行相同的作業,但 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 pwszVersion
, CorBindToRuntimeEx
則會識別版本號碼低於 .NET Framework 4 執行時間的已安裝執行時間集合,並從該集合載入最新版本的執行時間。 它不會載入 .NET Framework 4 或更新版本,而且如果未安裝舊版,則會失敗。 請注意,若傳遞 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_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] 實作 ICorRuntimeHost 或 ICLRRuntimeHost 介面 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 物件也會流經任何非同步點。 因此,其也會流經執行緒上目前存在的模擬。
您可透過兩種方式改變流程:
修改 ExecutionContext 設定來隱藏每個執行緒基礎的流程 (請參閱 SuppressFlow、SuppressFlow 和 SuppressFlowWindowsIdentity 方法)。
將流程預設模式變更為第 1 版相容性模式,不管目前執行緒上的 ExecutionContext 設定為何,WindowsIdentity 物件都不會流經任何非同步點。 變更預設模式的方式,取決於您是否使用受控可執行檔或非受控裝載介面來載入 CLR:
針對受控可執行檔,您必須將 <legacyImpersonationPolicy> 元素的
enabled
屬性設定為true
。針對非受控裝載主控介面,請在呼叫
CorBindToRuntimeEx
函式時,設定startupFlags
參數中的STARTUP_LEGACY_IMPERSONATION
旗標。
第 1 版相容性模式適用於整個流程,以及流程中的所有應用程式定義域。
規格需求
平台:請參閱系統需求。
標題: MSCorEE.h
程式庫: MSCorEE.dll
.NET Framework版本:自 1.0 起可用