CorBindToRuntimeEx 函數

允許非管理主機將通用語言執行時(CLR)載入程序。 CorBindToRuntimeCorBindToRuntimeEx函式執行相同的操作,但函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 建置。 有效值為 svrwks。 伺服器建置優化以利用多處理器進行垃圾回收,工作站建置則優化於單處理器機器上執行的客戶端應用。

如果 pwszBuildFlavor 設為 null,工作站建置會被載入。 在單處理器機器上運行時,工作站建置總是會被載入,即使 pwszBuildFlavor 設定為 svr。 然而,如果 pwszBuildFlavor 設定為 且 svr 並列了並行垃圾回收(詳見參數說明 startupFlags ),則伺服器建置會被載入。

startupFlags [在] 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 [在]其中實 CLSIDICorRuntimeHostICLRRuntimeHost 介面的 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 體也會流經任何非同步點。 因此,目前在討論串中的模仿(如果有的話)也會順暢進行。

你可以用兩種方式改變流程:

  1. 透過修改 ExecutionContext 設定以抑制每個執行緒的流量(參見 SuppressFlowSuppressFlow、 及 SuppressFlowWindowsIdentity 方法)。

  2. 將程序預設模式改為版本 1 相容模式,該模式中 WindowsIdentity 物件不會流經任何非同步點,無論目前執行緒的 ExecutionContext 設定如何。 如何更改預設模式,取決於你是使用受管理執行檔還是非受管理的託管介面來載入 CLR:

    1. 對於受管理的執行檔,你必須將 legacyImpersonationPolicy> 元素的<屬性設定enabledtrue

    2. 對於非管理型主機介面,呼叫函式時CorBindToRuntimeEx在參數中設定STARTUP_LEGACY_IMPERSONATION旗標startupFlags

    版本 1 相容模式適用於整個程序及流程中的所有應用領域。

要求

平台:請參閱系統需求

標題: MSCorEE.h

圖書館: MSCorEE.dll

.NET Framework 版本: 自 1.0 起提供

另請參閱