允許非管理主機將通用語言執行時(CLR)載入程序。
CorBindToRuntime 和CorBindToRuntimeEx函式執行相同的操作,但函CorBindToRuntimeEx式允許你設定旗標來指定 CLR 的行為。
此函式在 .NET Framework 4 中已被棄用。
此函式需要一組參數,允許主機執行以下操作:
指定將載入的執行時版本。
請指示是否應該載入伺服器或工作站建置。
控制是否進行並行垃圾回收或非同步垃圾回收。
備註
在實作 Intel Itanium架構(前稱 IA-64)的 64 位元系統上運行 WOW64 x86 模擬器的應用程式中,不支援並行垃圾回收。 欲了解更多關於在 64 位元 Windows 系統上使用 WOW64 的資訊,請參閱 執行 32 位元應用程式。
控制組件是否以域中立方式載入。
取得一個介面指標指向 ICorRuntimeHost ,可用於設定更多設定 CLR 實例的選項,在啟動前設定。
語法
HRESULT CorBindToRuntimeEx (
[in] LPCWSTR pwszVersion,
[in] LPCWSTR pwszBuildFlavor,
[in] DWORD startupFlags,
[in] REFCLSID rclsid,
[in] REFIID riid,
[out] LPVOID FAR *ppv
);
參數
pwszVersion [在]一個描述你想載入的 CLR 版本的字串。
.NET Framework 中的版本號由四個部分組成,並依期分隔: major.minor.build.revision。 被傳遞為 pwszVersion 的字串必須以字元「v」開頭,接著是版本號的前三個部分(例如「v1.0.1529」)。
某些版本的 CLR 會附帶一份政策聲明,說明是否與先前版本的 CLR 相容性。 預設情況下,啟動 shim 會 pwszVersion 根據政策語句進行評估,並載入與所請求版本相容的最新執行時版本。 主機可以透過傳遞參數的值STARTUP_LOADER_SAFEMODEstartupFlags,強制 shim 跳過政策評估,並載入 中pwszVersion指定的精確版本,如下所述。
若呼叫者指定 null ,pwszVersionCorBindToRuntimeEx則識別出版本號低於 .NET Framework 4 執行環境的已安裝執行環境集合,並從該集合載入最新版本的執行環境。 它無法載入 .NET Framework 4 或更新版本,若未安裝更早版本也會失敗。 請注意,傳遞 null 並不讓主機控制載入哪個版本的執行時。 雖然這種做法在某些情況下可能適用,但強烈建議主機提供特定版本來載入。
pwszBuildFlavor [在]一個字串,指定是載入伺服器還是工作站 CLR 建置。 有效值為 svr 和 wks。 伺服器建置優化以利用多處理器進行垃圾回收,工作站建置則優化於單處理器機器上執行的客戶端應用。
如果 pwszBuildFlavor 設為 null,工作站建置會被載入。 在單處理器機器上運行時,工作站建置總是會被載入,即使 pwszBuildFlavor 設定為 svr。 然而,如果 pwszBuildFlavor 設定為 且 svr 並列了並行垃圾回收(詳見參數說明 startupFlags ),則伺服器建置會被載入。
startupFlags [在] STARTUP_FLAGS 枚舉的數值組合。 這些旗標控制並行垃圾回收、領域中立程式碼及參數行為 pwszVersion 。 如果沒有設定旗標,預設網域是單一網域。 下列是有效值:
STARTUP_CONCURRENT_GCSTARTUP_LOADER_OPTIMIZATION_SINGLE_DOMAINSTARTUP_LOADER_OPTIMIZATION_MULTI_DOMAINSTARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN_HOSTSTARTUP_LOADER_SAFEMODESTARTUP_LOADER_SETPREFERENCESTARTUP_SERVER_GCSTARTUP_HOARD_GC_VMSTARTUP_SINGLE_VERSION_HOSTING_INTERFACESTARTUP_LEGACY_IMPERSONATIONSTARTUP_DISABLE_COMMITTHREADSTACKSTARTUP_ALWAYSFLOW_IMPERSONATION
關於這些旗幟的描述,請參見 STARTUP_FLAGS 列舉。
rclsid [在]其中實 CLSID 作 ICorRuntimeHost 或 ICLRRuntimeHost 介面的 coclass 之一。 支持的值有CLSID_CorRuntimeHost或CLSID_CLRRuntimeHost。
riid[在]來自 IID 的 。rclsid 支援的數值為IID_ICorRuntimeHost或IID_ICLRRuntimeHost。
ppv [出]回傳的介面指標為 riid。
備註
若 pwszVersion 指定不存在的執行版本,則 CorBindToRuntimeEx 回傳 HRESULT 值為 CLR_E_SHIM_RUNTIMELOAD。
執行上下文與 Windows 身份的流程
在 CLR 版本 1 中, WindowsIdentity 物件不會跨越非同步點,如新執行緒、執行緒池或計時器回撥。 在 CLR 2.0 版本中,物件 ExecutionContext 會包裹目前執行執行緒的部分資訊,並透過任何非同步點流動,但不會跨越應用程式領域邊界。 同樣地,物 WindowsIdentity 體也會流經任何非同步點。 因此,目前在討論串中的模仿(如果有的話)也會順暢進行。
你可以用兩種方式改變流程:
透過修改 ExecutionContext 設定以抑制每個執行緒的流量(參見 SuppressFlow、 SuppressFlow、 及 SuppressFlowWindowsIdentity 方法)。
將程序預設模式改為版本 1 相容模式,該模式中 WindowsIdentity 物件不會流經任何非同步點,無論目前執行緒的 ExecutionContext 設定如何。 如何更改預設模式,取決於你是使用受管理執行檔還是非受管理的託管介面來載入 CLR:
對於受管理的執行檔,你必須將 legacyImpersonationPolicy> 元素的<屬性設定
enabled為true。對於非管理型主機介面,呼叫函式時
CorBindToRuntimeEx在參數中設定STARTUP_LEGACY_IMPERSONATION旗標startupFlags。
版本 1 相容模式適用於整個程序及流程中的所有應用領域。
要求
平台:請參閱系統需求。
標題: MSCorEE.h
圖書館: MSCorEE.dll
.NET Framework 版本: 自 1.0 起提供